From 05b73001a297f89a9c5fcde197948eec9748a7bc Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Sat, 9 Apr 2016 11:00:06 +0200 Subject: [PATCH 001/290] 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/290] 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/290] 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/290] 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/290] 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/290] 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/290] 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/290] 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/290] 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/290] 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/290] 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/290] 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/290] 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/290] 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 27d1a3e93715e9b8089db56c380977a20606007f Mon Sep 17 00:00:00 2001 From: Dario Cattaruzza Date: Thu, 16 Jun 2016 12:27:56 +0100 Subject: [PATCH 015/290] Input synthesis from traces --- src/goto-programs/goto_trace.cpp | 6 +- src/goto-programs/goto_trace.h | 5 + src/goto-programs/interpreter.cpp | 566 ++++++++++++++++++++- src/goto-programs/interpreter_class.h | 33 +- src/goto-programs/interpreter_evaluate.cpp | 62 ++- 5 files changed, 637 insertions(+), 35 deletions(-) diff --git a/src/goto-programs/goto_trace.cpp b/src/goto-programs/goto_trace.cpp index 9feae7a68ba..f4709928e8f 100644 --- a/src/goto-programs/goto_trace.cpp +++ b/src/goto-programs/goto_trace.cpp @@ -75,7 +75,11 @@ void goto_trace_stept::output( case goto_trace_stept::SHARED_WRITE: out << "SHARED WRITE"; break; case goto_trace_stept::FUNCTION_CALL: out << "FUNCTION CALL"; break; case goto_trace_stept::FUNCTION_RETURN: out << "FUNCTION RETURN"; break; - default: assert(false); + case goto_trace_stept::DEAD: out << "DEAD" << std::endl; return; + default: { + out << "unknown type: " << type << std::endl; + assert(false); + } } if(type==ASSERT || type==ASSUME || type==GOTO) diff --git a/src/goto-programs/goto_trace.h b/src/goto-programs/goto_trace.h index b1629a5a6f5..97ea42d5f7e 100644 --- a/src/goto-programs/goto_trace.h +++ b/src/goto-programs/goto_trace.h @@ -154,6 +154,11 @@ class goto_tracet steps.push_back(step); } + inline goto_trace_stept &get_last_step() + { + return steps.back(); + } + // delete all steps after (not including) s void trim_after(stepst::iterator s) { diff --git a/src/goto-programs/interpreter.cpp b/src/goto-programs/interpreter.cpp index 7039d376da9..388796a5f0d 100644 --- a/src/goto-programs/interpreter.cpp +++ b/src/goto-programs/interpreter.cpp @@ -9,10 +9,18 @@ Author: Daniel Kroening, kroening@kroening.com #include #include #include +#include #include +#include #include #include +#include +#include +#include +#include +#include +#include #include "interpreter.h" #include "interpreter_class.h" @@ -31,6 +39,48 @@ Function: interpretert::operator() void interpretert::operator()() { + show=true; + initialise(true); + try { + std::cout << "Initialize:"; + + std::cout << "Type h for help" << std::endl; + while(!done) { + num_steps=1; + stack_depth=-1; + command(); + if(num_steps==0) + show_state(); + while(!done && ((num_steps<0) || ((num_steps--)>0))) { + step(); + show_state(); + } + while(!done && (stack_depth<=call_stack.size()) + && (stack_depth>=0)) { + step(); + show_state(); + } + } + std::cout << "Program End." << std::endl; + } catch (const char *e) { + std::cout << e << std::endl; + } + while(!done) command(); +} + +/******************************************************************* + +Function: interpretert::initialise + + Inputs: + + Outputs: + + Purpose: + + \*******************************************************************/ + +void interpretert::initialise(bool init) { build_memory_map(); const goto_functionst::function_mapt::const_iterator @@ -48,12 +98,16 @@ void interpretert::operator()() function=main_it; done=false; - - while(!done) - { + if(init) { + stack_depth=call_stack.size()+1; show_state(); - command(); - if(!done) step(); + step(); + while(!done && (stack_depth<=call_stack.size()) && (stack_depth>=0)) { + show_state(); + step(); + } + clear_input_flags(); + input_vars.clear(); } } @@ -71,6 +125,7 @@ Function: interpretert::show_state void interpretert::show_state() { + if(!show) return; std::cout << std::endl; std::cout << "----------------------------------------------------" << std::endl; @@ -82,8 +137,6 @@ void interpretert::show_state() } else function->second.body.output_instruction(ns, function->first, std::cout, PC); - - std::cout << std::endl; } /*******************************************************************\ @@ -101,7 +154,7 @@ Function: interpretert::command void interpretert::command() { #define BUFSIZE 100 - char command[BUFSIZE]; + char command[BUFSIZE]; if(fgets(command, BUFSIZE-1, stdin)==NULL) { done=true; @@ -112,6 +165,74 @@ void interpretert::command() if(ch=='q') done=true; + else if(ch=='h') { + num_steps=0; + std::cout << "Interpreter help" << std::endl; + std::cout << "h: display this menu" << std::endl; + std::cout << "i: output program inputs" << std::endl; + std::cout << "id: output program inputs with det values for don cares" << std::endl; + std::cout << "in: output program inputs with non-det values for don cares" << std::endl; + std::cout << "it: output program inputs for last trace" << std::endl; + std::cout << "i file: output program inputs for [json] file trace" << std::endl; + std::cout << "j: output json trace" << std::endl; + std::cout << "o: output goto trace" << std::endl; + std::cout << "q: quit" << std::endl; + std::cout << "r: run until completion" << std::endl; + std::cout << "s#: step a number of instructions" << std::endl; + std::cout << "sa: step across a function" << std::endl; + std::cout << "so: step out of a function" << std::endl; + } else if(ch=='i') { + ch=tolower(command[1]); + if(ch=='d') list_inputs(false); + else if(ch=='n') list_inputs(true); + else if(ch=='t') load_counter_example_inputs(steps); + else if(ch==' ') load_counter_example_inputs(command+3); + num_steps=0; + print_inputs(); + } else if(ch=='j') { + num_steps=0; + jsont json_steps; + convert(ns, steps, json_steps); + ch=tolower(command[1]); + if(ch==' ') { + std::ofstream file; + file.open(command+2); + if(file.is_open()) { + json_steps.output(file); + file.close(); + return; + } + } + json_steps.output(std::cout); + } else if(ch=='o') { + num_steps=0; + ch=tolower(command[1]); + if(ch==' ') { + std::ofstream file; + file.open(command+2); + if(file.is_open()) { + steps.output(ns, file); + file.close(); + return; + } + } + steps.output(ns, std::cout); + } else if(ch=='r') { + num_steps=-1; + } else if(ch=='s') { + ch=tolower(command[1]); + if(ch=='e') + num_steps=-1; + if(ch=='o') + stack_depth=call_stack.size(); + if(ch=='a') + stack_depth=call_stack.size()+1; + else { + num_steps=atoi(command+1); + if(num_steps==0) + num_steps=1; + } + } } /*******************************************************************\ @@ -144,19 +265,26 @@ void interpretert::step() } next_PC=PC; - next_PC++; + next_PC++; + steps.add_step(goto_trace_stept()); + goto_trace_stept &trace_step=steps.get_last_step(); + trace_step.thread_nr=thread_id; + trace_step.pc=PC; switch(PC->type) { case GOTO: + trace_step.type=goto_trace_stept::GOTO; execute_goto(); break; case ASSUME: + trace_step.type=goto_trace_stept::ASSUME; execute_assume(); break; case ASSERT: + trace_step.type=goto_trace_stept::ASSERT; execute_assert(); break; @@ -165,15 +293,23 @@ void interpretert::step() break; case DECL: + trace_step.type=goto_trace_stept::DECL; + /*trace_step.full_lhs=step.full_lhs; + trace_step.lhs_object=to_symbol_expr(trace_step.full_lhs); + trace_step.full_lhs_value=decision_procedure.get(step.ssa_lhs);*/ execute_decl(); break; case SKIP: case LOCATION: + trace_step.type=goto_trace_stept::LOCATION; + break; case END_FUNCTION: + trace_step.type=goto_trace_stept::FUNCTION_RETURN; break; case RETURN: + trace_step.type=goto_trace_stept::FUNCTION_RETURN; if(call_stack.empty()) throw "RETURN without call"; @@ -189,14 +325,17 @@ void interpretert::step() break; case ASSIGN: + trace_step.type=goto_trace_stept::ASSIGNMENT; execute_assign(); break; case FUNCTION_CALL: + trace_step.type=goto_trace_stept::FUNCTION_CALL; execute_function_call(); break; case START_THREAD: + trace_step.type=goto_trace_stept::SPAWN; throw "START_THREAD not yet implemented"; case END_THREAD: @@ -204,14 +343,16 @@ void interpretert::step() break; case ATOMIC_BEGIN: + trace_step.type=goto_trace_stept::ATOMIC_BEGIN; throw "ATOMIC_BEGIN not yet implemented"; case ATOMIC_END: + trace_step.type=goto_trace_stept::ATOMIC_END; throw "ATOMIC_END not yet implemented"; case DEAD: - throw "DEAD not yet implemented"; - + trace_step.type=goto_trace_stept::DEAD; + break;//throw "DEAD not yet implemented"; default: throw "encountered instruction with undefined instruction type"; } @@ -288,7 +429,173 @@ void interpretert::execute_decl() assert(PC->code.get_statement()==ID_decl); } -/*******************************************************************\ +/******************************************************************* + +Function: interpretert::get_component_id + + Inputs: + + Outputs: + + Purpose: + + \*******************************************************************/ +irep_idt interpretert::get_component_id(irep_idt &object,unsigned offset) +{ + const symbolt &symbol=ns.lookup(object); + const typet real_type=ns.follow(symbol.type); + if(real_type.id()!=ID_struct) + throw "request for member of non-struct"; + const struct_typet &struct_type=to_struct_type(real_type); + const struct_typet::componentst &components=struct_type.components(); + for(struct_typet::componentst::const_iterator it=components.begin(); + it!=components.end();++it) { + if(offset<=0) return it->id(); + unsigned size=get_size(it->type()); + assert(size>=0); + offset -= size; + } + return object; +} + +/******************************************************************* + +Function: interpretert::get_value + + Inputs: + + Outputs: + + Purpose: + + \*******************************************************************/ +exprt interpretert::get_value(const typet &type, unsigned offset) +{ + const typet real_type=ns.follow(type); + if(real_type.id()==ID_struct) { + exprt result=struct_exprt(real_type); + const struct_typet &struct_type=to_struct_type(real_type); + const struct_typet::componentst &components=struct_type.components(); + result.reserve_operands(components.size()); + for(struct_typet::componentst::const_iterator it=components.begin(); + it!=components.end();++it) { + unsigned size=get_size(it->type()); + assert(size>=0); + const exprt operand=get_value(it->type(), offset); + offset += size; + result.copy_to_operands(operand); + } + return result; + } else if(real_type.id()==ID_array) { + exprt result(ID_constant, type); + //array_exprt result(type); + const exprt &size_expr=static_cast(type.find(ID_size)); + unsigned subtype_size=get_size(type.subtype()); + mp_integer mp_count; + to_integer(size_expr, mp_count); + unsigned count=integer2unsigned(mp_count); + result.reserve_operands(count); + for(unsigned i=0;i=0) + return side_effect_expr_nondett(type); + std::vector rhs; + rhs.push_back(memory[offset].value); + return get_value(type, rhs); +} + +/******************************************************************* + Function: interpretert::get_value + + Inputs: + + Outputs: + + Purpose: + + \*******************************************************************/ +exprt interpretert::get_value(const typet &type, std::vector &rhs,unsigned offset) +{ + const typet real_type=ns.follow(type); + + if(real_type.id()==ID_struct) { + exprt result=struct_exprt(real_type); + const struct_typet &struct_type=to_struct_type(real_type); + const struct_typet::componentst &components=struct_type.components(); + + result.reserve_operands(components.size()); + for(struct_typet::componentst::const_iterator it=components.begin(); + it!=components.end();++it) { + unsigned size=get_size(it->type()); + assert(size>=0); + const exprt operand=get_value(it->type(), rhs, offset); + offset += size; + result.copy_to_operands(operand); + } + + return result; + } else if(real_type.id()==ID_array) { + exprt result(ID_constant, type); + //array_exprt result(type); + const exprt &size_expr=static_cast(type.find(ID_size)); + unsigned subtype_size=get_size(type.subtype()); + mp_integer mp_count; + to_integer(size_expr, mp_count); + unsigned count=integer2unsigned(mp_count); + result.reserve_operands(count); + for(unsigned i=0;i &rhs) { - for(unsigned i=0; i > argument_values; + std::vector>argument_values; argument_values.resize(function_call.arguments().size()); - for(std::size_t i=0; i=memory.size()) memory.resize(address+1); memory[address].value=0; memory[address].identifier=id; memory[address].offset=i; + memory[address].initialised=0; } stack_pointer+=size; @@ -486,8 +806,7 @@ void interpretert::execute_function_call() if(argument_values.size()second.body.instructions.begin(); + next_PC=f_it->second.body.instructions.begin(); } else - throw "no body for "+id2string(identifier); + std::cout << "no body for "+id2string(identifier);//TODO:used to be throw. need some better approach? need to check state of buffers (and by refs) } /*******************************************************************\ @@ -521,6 +840,7 @@ void interpretert::build_memory_map() memory.resize(1); memory[0].offset=0; memory[0].identifier="NULL-OBJECT"; + memory[0].initialised=0; // now do regular static symbols for(symbol_tablet::symbolst::const_iterator @@ -564,12 +884,13 @@ void interpretert::build_memory_map(const symbolt &symbol) memory.resize(address+size); memory_map[symbol.name]=address; - for(unsigned i=0; i rhs; + evaluate(it->second, rhs); + if(rhs.empty()) + continue; + memory_mapt::const_iterator m_it1=memory_map.find(it->first); + if(m_it1==memory_map.end()) + continue; + mp_integer address=m_it1->second; + unsigned size=get_size(it->second.type()); + if(size!=rhs.size()) + continue; + assign(address, rhs); + } + clear_input_flags(); +} + +/******************************************************************* + Function: list_inputs + + Inputs: + + Outputs: + + Purpose: + + \*******************************************************************/ +void interpretert::list_inputs(bool use_non_det) { + input_vars.clear(); + for(unsigned long i=0;i=0) + continue; + if(strncmp(cell.identifier.c_str(), "__CPROVER", 9)==0) + continue; + + try { + symbolt symbol=symbol_table.lookup(cell.identifier); + if(use_non_det) { + exprt value=get_value(symbol.type, i - cell.offset); + input_vars.insert( + std::pair(cell.identifier, value)); + } else { + std::vector rhs; + while(memory[i].offset>0) + i--; + rhs.push_back(memory[i].value); + for(unsigned long j=i+1;j(cell.identifier, value)); + } + } catch (const char *e) { + } catch (const std::string e) { + } + for(unsigned long j=i+1; + (j0) + continue; + if((cell.initialised<0) + && (strncmp(cell.identifier.c_str(), "__CPROVER", 9)!=0)) { + input_vars[cell.identifier]=inputs[cell.identifier]; + } + } + +} + +/******************************************************************* + Function: print_inputs + + Inputs: + + Outputs: + + Purpose: + + \*******************************************************************/ +void interpretert::print_inputs() { + if(input_vars.size()<=0) + list_inputs(); + for(input_varst::iterator it=input_vars.begin();it!=input_vars.end(); + it++) { + std::cout << it->first << "=" << from_expr(ns, it->first, it->second) + << std::endl; + } +} + +/******************************************************************* + Function: load_counter_example_inputs + + Inputs: + + Outputs: + + Purpose: + + \*******************************************************************/ + +interpretert::input_varst& interpretert::load_counter_example_inputs( + const std::string &filename) { + jsont counter_example; + message_clientt messgae_client; + if(parse_json(filename, messgae_client.get_message_handler(), + counter_example)) { + show=false; + input_varst inputs; + for(jsont::objectt::const_iterator it=counter_example.object.end(); + it!=counter_example.object.begin();) { + it--; + irep_idt id=it->second["lhs"].value; + inputs[id]=to_expr(ns, id, it->second["value"].value); + } + try { + initialise(true); + fill_inputs(inputs); + while(!done) + step(); + } catch(const char *e) { + std::cout << e << std::endl; + } + list_inputs(inputs); + show=true; + } + return input_vars; +} + +interpretert::input_varst& interpretert::load_counter_example_inputs(goto_tracet &trace) { + jsont counter_example; + message_clientt messgae_client; + show=false; + input_varst inputs; + for(goto_tracet::stepst::iterator it=trace.steps.end();it!=trace.steps.begin();) + { + it--; + if(it->pc->is_other() || it->pc->is_assign()) + { + irep_idt id=to_symbol_expr(it->full_lhs).get_identifier(); + inputs[id]=it->full_lhs_value; + } + } + try { + initialise(true); + fill_inputs(inputs); + while(!done) { + show_state(); + step(); + } + } catch(const char *e) { + std::cout << e << std::endl; + } + list_inputs(inputs); + show=true; + return input_vars; +} + +/******************************************************************* Function: interpreter diff --git a/src/goto-programs/interpreter_class.h b/src/goto-programs/interpreter_class.h index 48e23036243..c05a71e0675 100644 --- a/src/goto-programs/interpreter_class.h +++ b/src/goto-programs/interpreter_class.h @@ -3,6 +3,8 @@ #include #include "goto_functions.h" +#include "goto_trace.h" +#include "json_goto_trace.h" /*******************************************************************\ @@ -42,6 +44,7 @@ class interpretert irep_idt identifier; unsigned offset; mp_integer value; + mutable char initialised; }; typedef std::vector memoryt; @@ -52,6 +55,11 @@ class interpretert void build_memory_map(); void build_memory_map(const symbolt &symbol); unsigned get_size(const typet &type) const; + + irep_idt get_component_id(irep_idt &object,unsigned offset); + exprt get_value(const typet &type,unsigned offset=0); + exprt get_value(const typet &type,std::vector &rhs,unsigned offset=0); + void step(); void execute_assert(); @@ -61,6 +69,11 @@ class interpretert void execute_function_call(); void execute_other(); void execute_decl(); + void clear_input_flags(); + + void allocate( + mp_integer address, + unsigned size); void assign( mp_integer address, @@ -81,13 +94,20 @@ class interpretert memory_mapt local_map; unsigned old_stack_pointer; }; - + typedef std::stack call_stackt; - call_stackt call_stack; + typedef std::map input_varst; + call_stackt call_stack; + input_varst input_vars; goto_functionst::function_mapt::const_iterator function; goto_programt::const_targett PC, next_PC; + goto_tracet steps; bool done; + bool show; + int num_steps; + int stack_depth; + int thread_id; bool evaluate_boolean(const exprt &expr) const { @@ -103,5 +123,14 @@ class interpretert mp_integer evaluate_address(const exprt &expr) const; + void initialise(bool init); void show_state(); + + void list_inputs(bool use_non_det = false); + void list_inputs(input_varst &inputs); + void print_inputs(); + void fill_inputs(input_varst &inputs); + input_varst& load_counter_example_inputs(const std::string &filename); + input_varst& load_counter_example_inputs(goto_tracet &trace); + }; diff --git a/src/goto-programs/interpreter_evaluate.cpp b/src/goto-programs/interpreter_evaluate.cpp index 9b441099d68..1b6a0f2b6e6 100644 --- a/src/goto-programs/interpreter_evaluate.cpp +++ b/src/goto-programs/interpreter_evaluate.cpp @@ -17,7 +17,7 @@ Author: Daniel Kroening, kroening@kroening.com /*******************************************************************\ -Function: interpretert::evaluate +Function: interpretert::read Inputs: @@ -36,8 +36,11 @@ void interpretert::read( { mp_integer value; - if(addressfirst, expr) << std::endl; From 9bb988da9a4bfd38ddc8f2f14666482a6b0501a9 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 17 Jun 2016 17:19:25 +0200 Subject: [PATCH 016/290] 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 16f2a54f4b2db9a66889ca76a09aa53876f238d4 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Wed, 8 Jun 2016 11:25:12 +0200 Subject: [PATCH 017/290] C library: provide asm renamed functions of unistd.h --- src/ansi-c/library/unistd.c | 99 +++++++++++++++++++++++++++---------- 1 file changed, 72 insertions(+), 27 deletions(-) diff --git a/src/ansi-c/library/unistd.c b/src/ansi-c/library/unistd.c index 839d71e6b68..8587036ddea 100644 --- a/src/ansi-c/library/unistd.c +++ b/src/ansi-c/library/unistd.c @@ -2,6 +2,7 @@ unsigned int sleep(unsigned int seconds) { + __CPROVER_HIDE:; // do nothing, but return nondet value unsigned remaining_time; @@ -10,6 +11,16 @@ unsigned int sleep(unsigned int seconds) return remaining_time; } +/* FUNCTION: _sleep */ + +unsigned int sleep(unsigned int seconds); + +inline unsigned int _sleep(unsigned int seconds) +{ + __CPROVER_HIDE:; + return sleep(seconds); +} + /* FUNCTION: unlink */ int unlink(const char *s) @@ -64,15 +75,6 @@ int pipe(int fildes[2]) /* FUNCTION: close */ -#ifdef _WIN32 -#include -#else -#ifndef __CPROVER_UNISTD_H_INCLUDED -#include -#define __CPROVER_UNISTD_H_INCLUDED -#endif -#endif - extern struct __CPROVER_pipet __CPROVER_pipes[]; // offset to make sure we don't collide with other fds extern const int __CPROVER_pipe_offset; @@ -98,14 +100,25 @@ int close(int fildes) return retval; } +/* FUNCTION: _close */ + +inline int _close(int fildes) +{ + __CPROVER_HIDE:; + return close(fildes); +} + /* FUNCTION: write */ -#ifdef _WIN32 -#include +// do not include unistd.h as this might trigger GCC asm renaming of +// write to _write; this is covered by the explicit definition of +// _write below +#ifdef _MSC_VER +#define ssize_t signed long #else -#ifndef __CPROVER_UNISTD_H_INCLUDED -#include -#define __CPROVER_UNISTD_H_INCLUDED +#ifndef __CPROVER_SYS_TYPES_H_INCLUDED +#include +#define __CPROVER_SYS_TYPES_H_INCLUDED #endif #endif @@ -113,10 +126,6 @@ extern struct __CPROVER_pipet __CPROVER_pipes[]; // offset to make sure we don't collide with other fds extern const int __CPROVER_pipe_offset; -#ifdef _MSC_VER -#define ssize_t signed long -#endif - ssize_t write(int fildes, const void *buf, size_t nbyte) { __CPROVER_HIDE:; @@ -146,25 +155,43 @@ ssize_t write(int fildes, const void *buf, size_t nbyte) return retval; } -/* FUNCTION: read */ +/* FUNCTION: _write */ -#ifdef _WIN32 -#include +#ifdef _MSC_VER +#define ssize_t signed long #else -#ifndef __CPROVER_UNISTD_H_INCLUDED -#include -#define __CPROVER_UNISTD_H_INCLUDED +#ifndef __CPROVER_SYS_TYPES_H_INCLUDED +#include +#define __CPROVER_SYS_TYPES_H_INCLUDED #endif #endif -extern struct __CPROVER_pipet __CPROVER_pipes[]; -// offset to make sure we don't collide with other fds -extern const int __CPROVER_pipe_offset; +ssize_t write(int fildes, const void *buf, size_t nbyte); +inline ssize_t _write(int fildes, const void *buf, size_t nbyte) +{ + __CPROVER_HIDE:; + return write(fildes, buf, nbyte); +} + +/* FUNCTION: read */ + +// do not include unistd.h as this might trigger GCC asm renaming of +// read to _read; this is covered by the explicit definition of _read +// below #ifdef _MSC_VER #define ssize_t signed long +#else +#ifndef __CPROVER_SYS_TYPES_H_INCLUDED +#include +#define __CPROVER_SYS_TYPES_H_INCLUDED +#endif #endif +extern struct __CPROVER_pipet __CPROVER_pipes[]; +// offset to make sure we don't collide with other fds +extern const int __CPROVER_pipe_offset; + ssize_t read(int fildes, void *buf, size_t nbyte) { __CPROVER_HIDE:; @@ -209,3 +236,21 @@ ssize_t read(int fildes, void *buf, size_t nbyte) return retval; } +/* FUNCTION: _read */ + +#ifdef _MSC_VER +#define ssize_t signed long +#else +#ifndef __CPROVER_SYS_TYPES_H_INCLUDED +#include +#define __CPROVER_SYS_TYPES_H_INCLUDED +#endif +#endif + +ssize_t read(int fildes, void *buf, size_t nbyte); + +inline ssize_t _read(int fildes, void *buf, size_t nbyte) +{ + __CPROVER_HIDE:; + return read(fildes, buf, nbyte); +} From 438c65538fc29ede0d5faed8d4974daedfc67b96 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Thu, 31 Mar 2016 22:14:09 +0000 Subject: [PATCH 018/290] Bugfixes of typechecking and linking macro symbols --- src/ansi-c/c_typecheck_base.cpp | 11 ++++++++--- src/ansi-c/c_typecheck_expr.cpp | 4 +++- src/goto-cc/compile.cpp | 1 + src/goto-programs/goto_convert_functions.cpp | 1 + src/linking/linking.cpp | 1 + 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ansi-c/c_typecheck_base.cpp b/src/ansi-c/c_typecheck_base.cpp index 59c423c5dc2..f6ece710cd1 100644 --- a/src/ansi-c/c_typecheck_base.cpp +++ b/src/ansi-c/c_typecheck_base.cpp @@ -195,7 +195,8 @@ void c_typecheck_baset::typecheck_new_symbol(symbolt &symbol) if(symbol.type.id()==ID_code) { - if(symbol.value.is_not_nil()) + if(symbol.value.is_not_nil() && + !symbol.is_macro) typecheck_function_body(symbol); else { @@ -361,7 +362,8 @@ void c_typecheck_baset::typecheck_redefinition_non_type( } // do initializer, this may change the type - if(follow(new_symbol.type).id()!=ID_code) + if(follow(new_symbol.type).id()!=ID_code && + !new_symbol.is_macro) do_initializer(new_symbol); const typet &final_new=follow(new_symbol.type); @@ -464,7 +466,10 @@ void c_typecheck_baset::typecheck_redefinition_non_type( old_symbol.is_weak=true; } - typecheck_function_body(new_symbol); + if(new_symbol.is_macro) + old_symbol.is_macro=true; + else + typecheck_function_body(new_symbol); // overwrite location old_symbol.location=new_symbol.location; diff --git a/src/ansi-c/c_typecheck_expr.cpp b/src/ansi-c/c_typecheck_expr.cpp index 374c05a96bf..462bc3dfda4 100644 --- a/src/ansi-c/c_typecheck_expr.cpp +++ b/src/ansi-c/c_typecheck_expr.cpp @@ -839,11 +839,13 @@ void c_typecheck_baset::typecheck_expr_symbol(exprt &expr) // preserve enum key irep_idt base_name=expr.get(ID_C_base_name); - expr=symbol.value; + follow_macros(expr); if(expr.id()==ID_constant && !base_name.empty()) expr.set(ID_C_cformat, base_name); + else + typecheck_expr(expr); // preserve location expr.add_source_location()=source_location; diff --git a/src/goto-cc/compile.cpp b/src/goto-cc/compile.cpp index 0f9c7a85701..0e04ca5c0a8 100644 --- a/src/goto-cc/compile.cpp +++ b/src/goto-cc/compile.cpp @@ -850,6 +850,7 @@ void compilet::convert_symbols(goto_functionst &dest) assert(s_it!=symbol_table.symbols.end()); if(s_it->second.type.id()==ID_code && + !s_it->second.is_macro && s_it->second.value.id()!="compiled" && s_it->second.value.is_not_nil()) { diff --git a/src/goto-programs/goto_convert_functions.cpp b/src/goto-programs/goto_convert_functions.cpp index 85d85ecc5d1..78747721772 100644 --- a/src/goto-programs/goto_convert_functions.cpp +++ b/src/goto-programs/goto_convert_functions.cpp @@ -77,6 +77,7 @@ void goto_convert_functionst::goto_convert() forall_symbols(it, symbol_table.symbols) { if(!it->second.is_type && + !it->second.is_macro && it->second.type.id()==ID_code && (it->second.mode==ID_C || it->second.mode==ID_cpp || diff --git a/src/linking/linking.cpp b/src/linking/linking.cpp index 76724e30856..b7cdf57705b 100644 --- a/src/linking/linking.cpp +++ b/src/linking/linking.cpp @@ -805,6 +805,7 @@ void linkingt::duplicate_code_symbol( old_symbol.value=new_symbol.value; old_symbol.type=new_symbol.type; // for parameter identifiers old_symbol.is_weak=new_symbol.is_weak; + old_symbol.is_macro=new_symbol.is_macro; } else if(to_code_type(old_symbol.type).get_inlined()) { From 51cb62cab05a1b1b240c85b979e48568a66b31eb Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Thu, 31 Mar 2016 22:18:45 +0000 Subject: [PATCH 019/290] Interpret __attribute__((alias("foo"))) --- regression/cbmc/gcc_attribute_alias1/main.c | 21 +++++++++++++++++++ .../cbmc/gcc_attribute_alias1/test.desc | 8 +++++++ src/ansi-c/ansi_c_convert_type.cpp | 6 ++++++ src/ansi-c/c_storage_spec.cpp | 6 ++++++ src/ansi-c/c_storage_spec.h | 8 ++++++- src/ansi-c/c_typecheck_base.cpp | 11 ++++++++++ src/ansi-c/parser.y | 3 +++ src/ansi-c/scanner.l | 16 +++++++++----- 8 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 regression/cbmc/gcc_attribute_alias1/main.c create mode 100644 regression/cbmc/gcc_attribute_alias1/test.desc diff --git a/regression/cbmc/gcc_attribute_alias1/main.c b/regression/cbmc/gcc_attribute_alias1/main.c new file mode 100644 index 00000000000..3e1bf1ebf4b --- /dev/null +++ b/regression/cbmc/gcc_attribute_alias1/main.c @@ -0,0 +1,21 @@ +#include + +int foo(int a) +{ + return a; +} + +// this is a GCC extension + +int bar(int b) __attribute__((alias("foo"))); + +__typeof__(foo) bar2 __attribute__((alias("foo"))); + +int main() +{ + #ifdef __GNUC__ + assert(bar(42)==42); + assert(bar2(42)==42); + #endif + return 0; +} diff --git a/regression/cbmc/gcc_attribute_alias1/test.desc b/regression/cbmc/gcc_attribute_alias1/test.desc new file mode 100644 index 00000000000..466da18b2b5 --- /dev/null +++ b/regression/cbmc/gcc_attribute_alias1/test.desc @@ -0,0 +1,8 @@ +CORE +main.c + +^EXIT=0$ +^SIGNAL=0$ +-- +^warning: ignoring +^CONVERSION ERROR$ diff --git a/src/ansi-c/ansi_c_convert_type.cpp b/src/ansi-c/ansi_c_convert_type.cpp index e6e953ad3b5..da199394f1a 100644 --- a/src/ansi-c/ansi_c_convert_type.cpp +++ b/src/ansi-c/ansi_c_convert_type.cpp @@ -233,6 +233,12 @@ void ansi_c_convert_typet::read_rec(const typet &type) constructor=true; else if(type.id()==ID_destructor) destructor=true; + else if(type.id()==ID_alias && + type.has_subtype() && + type.subtype().id()==ID_string_constant) + { + c_storage_spec.alias=type.subtype().get(ID_value); + } else other.push_back(type); } diff --git a/src/ansi-c/c_storage_spec.cpp b/src/ansi-c/c_storage_spec.cpp index fd8dc27834e..a1fd592bf2b 100644 --- a/src/ansi-c/c_storage_spec.cpp +++ b/src/ansi-c/c_storage_spec.cpp @@ -55,4 +55,10 @@ void c_storage_spect::read(const typet &type) if(it->id()==ID_thread) is_thread_local=true; } + else if(type.id()==ID_alias && + type.has_subtype() && + type.subtype().id()==ID_string_constant) + { + alias=type.subtype().get(ID_value); + } } diff --git a/src/ansi-c/c_storage_spec.h b/src/ansi-c/c_storage_spec.h index 6c38d1b503e..685843e580d 100644 --- a/src/ansi-c/c_storage_spec.h +++ b/src/ansi-c/c_storage_spec.h @@ -34,10 +34,14 @@ class c_storage_spect is_register=false; is_inline=false; is_weak=false; + alias.clear(); } bool is_typedef, is_extern, is_static, is_register, is_inline, is_thread_local, is_weak; + + // __attribute__((alias("foo"))) + irep_idt alias; friend bool operator == ( const c_storage_spect &a, @@ -49,7 +53,8 @@ class c_storage_spect a.is_register==b.is_register && a.is_thread_local==b.is_thread_local && a.is_inline==b.is_inline && - a.is_weak==b.is_weak; + a.is_weak==b.is_weak && + a.alias==b.alias; } friend bool operator != ( @@ -70,6 +75,7 @@ class c_storage_spect a.is_inline |=b.is_inline; a.is_thread_local |=b.is_thread_local; a.is_weak |=b.is_weak; + if(!b.alias.empty()) a.alias=b.alias; return a; } diff --git a/src/ansi-c/c_typecheck_base.cpp b/src/ansi-c/c_typecheck_base.cpp index f6ece710cd1..8205e8615f6 100644 --- a/src/ansi-c/c_typecheck_base.cpp +++ b/src/ansi-c/c_typecheck_base.cpp @@ -761,6 +761,17 @@ void c_typecheck_baset::typecheck_declaration( // now check other half of type typecheck_type(symbol.type); + if(!full_spec.alias.empty()) + { + if(symbol.value.is_not_nil()) + throw "alias attribute cannot be used with a body"; + + // alias function need not have been declared yet, thus + // can't lookup + symbol.value=symbol_exprt(full_spec.alias); + symbol.is_macro=true; + } + typecheck_symbol(symbol); // add code contract (if any); we typecheck this after the diff --git a/src/ansi-c/parser.y b/src/ansi-c/parser.y index b827e91bc74..cd1f76a6f8b 100644 --- a/src/ansi-c/parser.y +++ b/src/ansi-c/parser.y @@ -132,6 +132,7 @@ extern char *yyansi_ctext; %token TOK_GCC_ATTRIBUTE_MODE "mode" %token TOK_GCC_ATTRIBUTE_GNU_INLINE "__gnu_inline__" %token TOK_GCC_ATTRIBUTE_WEAK "weak" +%token TOK_GCC_ATTRIBUTE_ALIAS "alias" %token TOK_GCC_ATTRIBUTE_NORETURN "noreturn" %token TOK_GCC_ATTRIBUTE_CONSTRUCTOR "constructor" %token TOK_GCC_ATTRIBUTE_DESTRUCTOR "destructor" @@ -1564,6 +1565,8 @@ gcc_type_attribute: { $$=$1; set($$, ID_static); } /* GCC extern inline - cleanup in ansi_c_declarationt::to_symbol */ | TOK_GCC_ATTRIBUTE_WEAK TOK_GCC_ATTRIBUTE_END { $$=$1; set($$, ID_weak); } + | TOK_GCC_ATTRIBUTE_ALIAS '(' TOK_STRING ')' TOK_GCC_ATTRIBUTE_END + { $$=$1; set($$, ID_alias); mto($$, $3); } | TOK_NORETURN { $$=$1; set($$, ID_noreturn); } | TOK_GCC_ATTRIBUTE_NORETURN TOK_GCC_ATTRIBUTE_END diff --git a/src/ansi-c/scanner.l b/src/ansi-c/scanner.l index 281239a5dd8..b1616940812 100644 --- a/src/ansi-c/scanner.l +++ b/src/ansi-c/scanner.l @@ -1,5 +1,6 @@ %option nounput %option noinput +%option stack %{ @@ -230,7 +231,7 @@ void ansi_c_scanner_init() } { - "*/" { BEGIN(STRING_LITERAL); } /* end comment state, back to STRING_LITERAL */ + "*/" { yy_pop_state(); } /* end comment state, back to STRING_LITERAL */ "/*" { yyansi_cerror("Probably nested comments"); } <> { yyansi_cerror("Unterminated comment"); return TOK_SCANNER_ERROR; } [^*/\n]* { /* ignore every char except '*' and NL (performance!) */ } @@ -252,14 +253,16 @@ void ansi_c_scanner_init() return TOK_CHARACTER; } -{string_lit} { +{string_lit} { PARSER.string_literal.clear(); PARSER.string_literal.append(yytext); newstack(yyansi_clval); PARSER.set_source_location(stack(yyansi_clval)); // String literals can be continued in // the next line - BEGIN(STRING_LITERAL); + yy_push_state(STRING_LITERAL); + // use yy_top_state() to keep the compiler happy + (void)yy_top_state(); } {string_lit} { PARSER.string_literal.append(yytext); } @@ -270,13 +273,13 @@ void ansi_c_scanner_init() PARSER.set_line_no(PARSER.get_line_no()-1); } {cppdirective} { /* ignore */ } -"/*" { BEGIN(STRING_LITERAL_COMMENT); /* C comment, ignore */ } +"/*" { yy_push_state(STRING_LITERAL_COMMENT); /* C comment, ignore */ } "//".*\n { /* C++ comment, ignore */ } . { // anything else: back to normal source_locationt l=stack(yyansi_clval).source_location(); stack(yyansi_clval)=convert_string_literal(PARSER.string_literal); stack(yyansi_clval).add_source_location().swap(l); - BEGIN(GRAMMAR); // back to normal + yy_pop_state(); // back to normal yyless(0); // put back return TOK_STRING; } @@ -1390,6 +1393,9 @@ __decltype { if(PARSER.cpp98 && PARSER.mode==ansi_c_parsert::GCC) "weak" | "__weak__" { BEGIN(GCC_ATTRIBUTE3); loc(); return TOK_GCC_ATTRIBUTE_WEAK; } +"alias" | +"__alias__" { BEGIN(GCC_ATTRIBUTE3); loc(); return TOK_GCC_ATTRIBUTE_ALIAS; } + "noreturn" | "__noreturn__" { BEGIN(GCC_ATTRIBUTE3); loc(); return TOK_GCC_ATTRIBUTE_NORETURN; } From 4af602a2cb50374c9e446b5be0ded049d5a5ee1e Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Thu, 31 Mar 2016 22:36:16 +0000 Subject: [PATCH 020/290] Support GCC asm labels --- regression/ansi-c/asm3/test.desc | 2 +- src/ansi-c/ansi_c_convert_type.cpp | 7 +-- src/ansi-c/c_storage_spec.cpp | 6 +++ src/ansi-c/c_storage_spec.h | 8 ++- src/ansi-c/c_typecheck_base.cpp | 87 +++++++++++++++++++++++++++++- src/ansi-c/c_typecheck_base.h | 5 ++ src/ansi-c/c_typecheck_expr.cpp | 19 +++++-- 7 files changed, 125 insertions(+), 9 deletions(-) diff --git a/regression/ansi-c/asm3/test.desc b/regression/ansi-c/asm3/test.desc index d809adda3df..0e9aada28d3 100644 --- a/regression/ansi-c/asm3/test.desc +++ b/regression/ansi-c/asm3/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +CORE main.c other.c ^EXIT=0$ diff --git a/src/ansi-c/ansi_c_convert_type.cpp b/src/ansi-c/ansi_c_convert_type.cpp index da199394f1a..3b2f66151c7 100644 --- a/src/ansi-c/ansi_c_convert_type.cpp +++ b/src/ansi-c/ansi_c_convert_type.cpp @@ -72,10 +72,11 @@ void ansi_c_convert_typet::read_rec(const typet &type) c_qualifiers.is_ptr64=true; else if(type.id()==ID_volatile) c_qualifiers.is_volatile=true; - else if(type.id()==ID_asm) + else if(type.id()==ID_asm && + type.has_subtype() && + type.subtype().id()==ID_string_constant) { - // These are called 'asm labels' by GCC. - // ignore for now + c_storage_spec.asm_label=type.subtype().get(ID_value); } else if(type.id()==ID_const) c_qualifiers.is_constant=true; diff --git a/src/ansi-c/c_storage_spec.cpp b/src/ansi-c/c_storage_spec.cpp index a1fd592bf2b..2facbcb7a91 100644 --- a/src/ansi-c/c_storage_spec.cpp +++ b/src/ansi-c/c_storage_spec.cpp @@ -61,4 +61,10 @@ void c_storage_spect::read(const typet &type) { alias=type.subtype().get(ID_value); } + else if(type.id()==ID_asm && + type.has_subtype() && + type.subtype().id()==ID_string_constant) + { + asm_label=type.subtype().get(ID_value); + } } diff --git a/src/ansi-c/c_storage_spec.h b/src/ansi-c/c_storage_spec.h index 685843e580d..b4b40b608a7 100644 --- a/src/ansi-c/c_storage_spec.h +++ b/src/ansi-c/c_storage_spec.h @@ -35,6 +35,7 @@ class c_storage_spect is_inline=false; is_weak=false; alias.clear(); + asm_label.clear(); } bool is_typedef, is_extern, is_static, is_register, @@ -42,6 +43,9 @@ class c_storage_spect // __attribute__((alias("foo"))) irep_idt alias; + + // GCC asm labels __asm__("foo") - these change the symbol name + irep_idt asm_label; friend bool operator == ( const c_storage_spect &a, @@ -54,7 +58,8 @@ class c_storage_spect a.is_thread_local==b.is_thread_local && a.is_inline==b.is_inline && a.is_weak==b.is_weak && - a.alias==b.alias; + a.alias==b.alias && + a.asm_label==b.asm_label; } friend bool operator != ( @@ -76,6 +81,7 @@ class c_storage_spect a.is_thread_local |=b.is_thread_local; a.is_weak |=b.is_weak; if(!b.alias.empty()) a.alias=b.alias; + if(!b.asm_label.empty()) a.asm_label=b.asm_label; return a; } diff --git a/src/ansi-c/c_typecheck_base.cpp b/src/ansi-c/c_typecheck_base.cpp index 8205e8615f6..ee296d82d0e 100644 --- a/src/ansi-c/c_typecheck_base.cpp +++ b/src/ansi-c/c_typecheck_base.cpp @@ -695,6 +695,89 @@ void c_typecheck_baset::typecheck_function_body(symbolt &symbol) /*******************************************************************\ +Function: c_typecheck_baset::apply_asm_label + + Inputs: + + Outputs: + + Purpose: + +\*******************************************************************/ + +void c_typecheck_baset::apply_asm_label( + const irep_idt &asm_label, + symbolt &symbol) +{ + const irep_idt orig_name=symbol.name; + + // restrict renaming to functions and global variables; + // procedure-local ones would require fixing the scope, as we + // do for parameters below + if(!asm_label.empty() && + !symbol.is_type && + (symbol.type.id()==ID_code || symbol.is_static_lifetime)) + { + symbol.name=asm_label; + symbol.base_name=asm_label; + } + + if(symbol.name!=orig_name) + { + if(!asm_label_map.insert( + std::make_pair(orig_name, asm_label)).second) + { + err_location(symbol.location); + if(asm_label_map[orig_name]==asm_label) + { + str << "duplicate (consistent) asm renaming"; + warning_msg(); + } + else + { + str << "error: conflicting asm renaming"; + throw 0; + } + } + } + else if(asm_label.empty()) + { + asm_label_mapt::const_iterator entry= + asm_label_map.find(symbol.name); + if(entry!=asm_label_map.end()) + { + symbol.name=entry->second; + symbol.base_name=entry->second; + } + } + + if(symbol.name!=orig_name && + symbol.type.id()==ID_code && + symbol.value.is_not_nil() && !symbol.is_macro) + { + const code_typet &code_type=to_code_type(symbol.type); + + for(code_typet::parameterst::const_iterator + p_it=code_type.parameters().begin(); + p_it!=code_type.parameters().end(); + ++p_it) + { + const irep_idt &p_bn=p_it->get_base_name(); + if(p_bn.empty()) + continue; + + irep_idt p_id=id2string(orig_name)+"::"+id2string(p_bn); + irep_idt p_new_id=id2string(symbol.name)+"::"+id2string(p_bn); + + if(!asm_label_map.insert( + std::make_pair(p_id, p_new_id)).second) + assert(asm_label_map[p_id]==p_new_id); + } + } +} + +/*******************************************************************\ + Function: c_typecheck_baset::typecheck_declaration Inputs: @@ -756,7 +839,6 @@ void c_typecheck_baset::typecheck_declaration( symbolt symbol; declaration.to_symbol(*d_it, symbol); - irep_idt identifier=symbol.name; // now check other half of type typecheck_type(symbol.type); @@ -772,6 +854,9 @@ void c_typecheck_baset::typecheck_declaration( symbol.is_macro=true; } + apply_asm_label(full_spec.asm_label, symbol); + irep_idt identifier=symbol.name; + typecheck_symbol(symbol); // add code contract (if any); we typecheck this after the diff --git a/src/ansi-c/c_typecheck_base.h b/src/ansi-c/c_typecheck_base.h index 14819faa2cc..f2386a8e94d 100644 --- a/src/ansi-c/c_typecheck_base.h +++ b/src/ansi-c/c_typecheck_base.h @@ -283,6 +283,11 @@ class c_typecheck_baset: src.id()==ID_c_enum_tag || src.id()==ID_c_bit_field; } + + typedef hash_map_cont asm_label_mapt; + asm_label_mapt asm_label_map; + + void apply_asm_label(const irep_idt &asm_label, symbolt &symbol); }; #endif diff --git a/src/ansi-c/c_typecheck_expr.cpp b/src/ansi-c/c_typecheck_expr.cpp index 462bc3dfda4..98d82f8220e 100644 --- a/src/ansi-c/c_typecheck_expr.cpp +++ b/src/ansi-c/c_typecheck_expr.cpp @@ -799,7 +799,7 @@ Function: c_typecheck_baset::typecheck_expr_symbol void c_typecheck_baset::typecheck_expr_symbol(exprt &expr) { - const irep_idt &identifier=to_symbol_expr(expr).get_identifier(); + irep_idt identifier=to_symbol_expr(expr).get_identifier(); // Is it a parameter? We do this while checking parameter lists. id_type_mapt::const_iterator p_it=parameter_map.find(identifier); @@ -811,6 +811,15 @@ void c_typecheck_baset::typecheck_expr_symbol(exprt &expr) return; } + // renaming via GCC asm label + asm_label_mapt::const_iterator entry= + asm_label_map.find(identifier); + if(entry!=asm_label_map.end()) + { + identifier=entry->second; + to_symbol_expr(expr).set_identifier(identifier); + } + // look it up const symbolt *symbol_ptr; if(lookup(identifier, symbol_ptr)) @@ -2151,8 +2160,12 @@ void c_typecheck_baset::typecheck_side_effect_function_call( if(f_op.id()==ID_symbol) { - const irep_idt &identifier= - to_symbol_expr(f_op).get_identifier(); + irep_idt identifier=to_symbol_expr(f_op).get_identifier(); + + asm_label_mapt::const_iterator entry= + asm_label_map.find(identifier); + if(entry!=asm_label_map.end()) + identifier=entry->second; if(symbol_table.symbols.find(identifier)==symbol_table.symbols.end()) { From b317b27da0e15a3d165f91d60fbc017873cb1a57 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Fri, 1 Apr 2016 00:19:09 +0000 Subject: [PATCH 021/290] Macros need to be applied across all functions after linking --- src/goto-programs/read_goto_binary.cpp | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/goto-programs/read_goto_binary.cpp b/src/goto-programs/read_goto_binary.cpp index 4abede465ae..622d03bd357 100644 --- a/src/goto-programs/read_goto_binary.cpp +++ b/src/goto-programs/read_goto_binary.cpp @@ -349,6 +349,33 @@ static bool link_functions( } } + // apply macros + rename_symbolt macro_application; + + forall_symbols(it, dest_symbol_table.symbols) + if(it->second.is_macro) + { + const symbolt &symbol=it->second; + + assert(symbol.value.id()==ID_symbol); + const irep_idt &id=to_symbol_expr(symbol.value).get_identifier(); + + #if 0 + if(!base_type_eq(symbol.type, ns.lookup(id).type, ns)) + { + std::cerr << symbol << std::endl; + std::cerr << ns.lookup(id) << std::endl; + } + assert(base_type_eq(symbol.type, ns.lookup(id).type, ns)); + #endif + + macro_application.insert_expr(symbol.name, id); + } + + if(!macro_application.expr_map.empty()) + Forall_goto_functions(dest_it, dest_functions) + rename_symbols_in_function(dest_it->second, macro_application); + return false; } From 4e3dbfab167f3748239af31b4f63c9d96d7a018e Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Wed, 27 Apr 2016 15:53:55 +0000 Subject: [PATCH 022/290] Re-declaring a non-code symbol with an asm label should change it to a macro --- src/ansi-c/c_typecheck_base.cpp | 1 + src/linking/static_lifetime_init.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ansi-c/c_typecheck_base.cpp b/src/ansi-c/c_typecheck_base.cpp index ee296d82d0e..f969a32fcc8 100644 --- a/src/ansi-c/c_typecheck_base.cpp +++ b/src/ansi-c/c_typecheck_base.cpp @@ -597,6 +597,7 @@ void c_typecheck_baset::typecheck_redefinition_non_type( { old_symbol.value=new_symbol.value; old_symbol.type=new_symbol.type; + old_symbol.is_macro=new_symbol.is_macro; } } diff --git a/src/linking/static_lifetime_init.cpp b/src/linking/static_lifetime_init.cpp index 096a4e7f749..e0aa6d19efe 100644 --- a/src/linking/static_lifetime_init.cpp +++ b/src/linking/static_lifetime_init.cpp @@ -74,7 +74,7 @@ bool static_lifetime_init( if(!symbol.is_static_lifetime) continue; - if(symbol.is_type) continue; + if(symbol.is_type || symbol.is_macro) continue; // special values if(identifier==CPROVER_PREFIX "constant_infinity_uint" || From ac5617c524d99c22e1b6ade7f2e894c35b542c09 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Wed, 27 Apr 2016 19:20:30 +0000 Subject: [PATCH 023/290] Maintain macro flag for non-code sybmols while linking --- src/linking/linking.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/linking/linking.cpp b/src/linking/linking.cpp index b7cdf57705b..4be3377c69f 100644 --- a/src/linking/linking.cpp +++ b/src/linking/linking.cpp @@ -933,6 +933,7 @@ void linkingt::duplicate_object_symbol( { // new_symbol wins old_symbol.value=new_symbol.value; + old_symbol.is_macro=new_symbol.is_macro; } else if(!new_symbol.is_weak) { From c24e731d4b3eba7109c1c3353a1068d6413f6148 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Sat, 11 Jun 2016 20:03:58 +0100 Subject: [PATCH 024/290] missing header --- regression/cbmc/Typecast1/main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/regression/cbmc/Typecast1/main.c b/regression/cbmc/Typecast1/main.c index f411d517623..75d6c7ab462 100644 --- a/regression/cbmc/Typecast1/main.c +++ b/regression/cbmc/Typecast1/main.c @@ -1,3 +1,5 @@ +#include + int main() { assert(((long long int)(unsigned long long)-1)==-1); From 2fefa5c79835bd535e3e1c07f1c9775d690ffda9 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Sat, 11 Jun 2016 20:16:32 +0100 Subject: [PATCH 025/290] property results are now uniform --- doc/html-manual/cbmc.shtml | 6 +++--- regression/cbmc-concurrency/pthread_join1/test.desc | 4 ++-- regression/cbmc-java/NullPointer1/test.desc | 2 +- regression/cbmc-java/NullPointer2/test.desc | 2 +- regression/cbmc-java/NullPointer3/test.desc | 2 +- regression/cbmc-java/NullPointer4/test.desc | 2 +- regression/cbmc/Function5/test.desc | 2 +- regression/cbmc/Multi_Dimensional_Array6/test.desc | 4 ++-- regression/cbmc/Overflow_Addition1/test.desc | 2 +- regression/cbmc/Pointer_byte_extract2/test.desc | 2 +- regression/cbmc/Pointer_byte_extract5/test.desc | 2 +- regression/cbmc/goto4/test.desc | 4 ++-- regression/cbmc/pipe1/test.desc | 2 +- src/cbmc/all_properties.cpp | 2 +- 14 files changed, 19 insertions(+), 19 deletions(-) diff --git a/doc/html-manual/cbmc.shtml b/doc/html-manual/cbmc.shtml index 7a1e8699c97..a40a56364d4 100644 --- a/doc/html-manual/cbmc.shtml +++ b/doc/html-manual/cbmc.shtml @@ -97,7 +97,7 @@ thus print a line as follows:

-[main.pointer_dereference.6] dereference failure: object bounds in argv[(signed long int)2]: FAILED +[main.pointer_dereference.6] dereference failure: object bounds in argv[(signed long int)2]: FAILURE

Counterexample Traces

@@ -119,8 +119,8 @@ our example, the program trace ends in the faulty array access. It also shows the values the input variables must have for the bug to occur. In this example, argc must be one to trigger the out-of-bounds array access. If you add a branch to the example that requires that -argc>=3, the bug is fixed and CBMC will report that all -properties are OK.

+argc>=3, the bug is fixed and CBMC will report that the +proofs of all properties have been successful.

Verifying Modules

diff --git a/regression/cbmc-concurrency/pthread_join1/test.desc b/regression/cbmc-concurrency/pthread_join1/test.desc index de046bb1e43..0d60be7dfd0 100644 --- a/regression/cbmc-concurrency/pthread_join1/test.desc +++ b/regression/cbmc-concurrency/pthread_join1/test.desc @@ -3,8 +3,8 @@ main.c --all-properties ^EXIT=10$ ^SIGNAL=0$ -^\[main\.assertion\.1\] assertion i==1: FAILED$ -^\[main\.assertion\.2\] assertion i==2: OK$ +^\[main\.assertion\.1\] assertion i==1: FAILURE$ +^\[main\.assertion\.2\] assertion i==2: SUCCESS$ ^\*\* 1 of 2 failed (2 iterations)$ -- ^warning: ignoring diff --git a/regression/cbmc-java/NullPointer1/test.desc b/regression/cbmc-java/NullPointer1/test.desc index d1bf0ab6d62..bf4dc51e8da 100644 --- a/regression/cbmc-java/NullPointer1/test.desc +++ b/regression/cbmc-java/NullPointer1/test.desc @@ -1,6 +1,6 @@ CORE NullPointer1.class ---pointer-check +--pointer-check --stop-on-fail ^EXIT=10$ ^SIGNAL=0$ ^ file NullPointer1.java line 16$ diff --git a/regression/cbmc-java/NullPointer2/test.desc b/regression/cbmc-java/NullPointer2/test.desc index ad760b3ce21..8bf602bc2af 100644 --- a/regression/cbmc-java/NullPointer2/test.desc +++ b/regression/cbmc-java/NullPointer2/test.desc @@ -1,6 +1,6 @@ CORE NullPointer2.class ---pointer-check +--pointer-check --stop-on-fail ^EXIT=10$ ^SIGNAL=0$ ^ file NullPointer2.java line 9$ diff --git a/regression/cbmc-java/NullPointer3/test.desc b/regression/cbmc-java/NullPointer3/test.desc index 66418097e1f..d422f43b99d 100644 --- a/regression/cbmc-java/NullPointer3/test.desc +++ b/regression/cbmc-java/NullPointer3/test.desc @@ -1,6 +1,6 @@ CORE NullPointer3.class ---pointer-check +--pointer-check --stop-on-fail ^EXIT=10$ ^SIGNAL=0$ ^ file NullPointer3.java line 5$ diff --git a/regression/cbmc-java/NullPointer4/test.desc b/regression/cbmc-java/NullPointer4/test.desc index 89b58256f3d..788cb61fdf1 100644 --- a/regression/cbmc-java/NullPointer4/test.desc +++ b/regression/cbmc-java/NullPointer4/test.desc @@ -1,6 +1,6 @@ CORE NullPointer4.class ---pointer-check +--pointer-check --stop-on-fail ^EXIT=10$ ^SIGNAL=0$ ^ file NullPointer4.java line 6$ diff --git a/regression/cbmc/Function5/test.desc b/regression/cbmc/Function5/test.desc index 44ff0a433c8..239e8494e54 100644 --- a/regression/cbmc/Function5/test.desc +++ b/regression/cbmc/Function5/test.desc @@ -3,6 +3,6 @@ main.c --pointer-check --bounds-check ^SIGNAL=0$ ^EXIT=10$ -^\[.*\] dereference failure: object bounds in \*p: FAILED$ +^\[.*\] dereference failure: object bounds in \*p: FAILURE$ -- ^warning: ignoring diff --git a/regression/cbmc/Multi_Dimensional_Array6/test.desc b/regression/cbmc/Multi_Dimensional_Array6/test.desc index e6216d8fe3b..d29a9f7cabf 100644 --- a/regression/cbmc/Multi_Dimensional_Array6/test.desc +++ b/regression/cbmc/Multi_Dimensional_Array6/test.desc @@ -3,8 +3,8 @@ main.c --unwind 3 --no-unwinding-assertions --all-properties ^EXIT=10$ ^SIGNAL=0$ -^\[main\.assertion\.1\] : OK$ -^\[main\.assertion\.2\] : FAILED$ +^\[main\.assertion\.1\] : SUCCESS$ +^\[main\.assertion\.2\] : FAILURE$ ^\*\* 1 of 2 failed (2 iterations)$ -- ^warning: ignoring diff --git a/regression/cbmc/Overflow_Addition1/test.desc b/regression/cbmc/Overflow_Addition1/test.desc index e4eb3c419e5..07fa8a17ceb 100644 --- a/regression/cbmc/Overflow_Addition1/test.desc +++ b/regression/cbmc/Overflow_Addition1/test.desc @@ -2,7 +2,7 @@ CORE main.c --signed-overflow-check ^SIGNAL=0$ -^\[.*\] arithmetic overflow on signed + in .*: FAILED$ +^\[.*\] arithmetic overflow on signed + in .*: FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/cbmc/Pointer_byte_extract2/test.desc b/regression/cbmc/Pointer_byte_extract2/test.desc index d0e938b109c..e99e8941463 100644 --- a/regression/cbmc/Pointer_byte_extract2/test.desc +++ b/regression/cbmc/Pointer_byte_extract2/test.desc @@ -3,7 +3,7 @@ main.c --all-properties --little-endian ^EXIT=10$ ^SIGNAL=0$ -^\[main\.assertion\.2\] .*: FAILED$ +^\[main\.assertion\.2\] .*: FAILURE$ ^\*\* 1 of 2 failed (2 iterations)$ -- ^warning: ignoring diff --git a/regression/cbmc/Pointer_byte_extract5/test.desc b/regression/cbmc/Pointer_byte_extract5/test.desc index d40554751e7..83d480509b3 100644 --- a/regression/cbmc/Pointer_byte_extract5/test.desc +++ b/regression/cbmc/Pointer_byte_extract5/test.desc @@ -3,7 +3,7 @@ main.c --all-properties --bounds-check --32 ^EXIT=10$ ^SIGNAL=0$ -^\[main\.array_bounds\.5\] array.List upper bound in .*: FAILED$ +^\[main\.array_bounds\.5\] array.List upper bound in .*: FAILURE$ ^\*\* 1 of 9 failed (2 iterations)$ -- ^warning: ignoring diff --git a/regression/cbmc/goto4/test.desc b/regression/cbmc/goto4/test.desc index 448fced814e..3fcce676021 100644 --- a/regression/cbmc/goto4/test.desc +++ b/regression/cbmc/goto4/test.desc @@ -3,7 +3,7 @@ main.c --unwind 1 --unwinding-assertions ^EXIT=10$ ^SIGNAL=0$ -^\[.*] assertion g == 0: OK$ -^\[.*] unwinding assertion loop 0: FAILED$ +^\[.*] assertion g == 0: SUCCESS$ +^\[.*] unwinding assertion loop 0: FAILURE$ -- ^warning: ignoring diff --git a/regression/cbmc/pipe1/test.desc b/regression/cbmc/pipe1/test.desc index 4f3dc3ca6c6..1272da21932 100644 --- a/regression/cbmc/pipe1/test.desc +++ b/regression/cbmc/pipe1/test.desc @@ -3,7 +3,7 @@ main.c --all-properties ^EXIT=10$ ^SIGNAL=0$ -^\[main\.assertion\.4\] assertion data\[1\]==31: FAILED$ +^\[main\.assertion\.4\] assertion data\[1\]==31: FAILURE$ ^\*\* 1 of 5 failed (2 iterations)$ -- ^warning: ignoring diff --git a/src/cbmc/all_properties.cpp b/src/cbmc/all_properties.cpp index e6d622c2993..9f9107970bf 100644 --- a/src/cbmc/all_properties.cpp +++ b/src/cbmc/all_properties.cpp @@ -247,7 +247,7 @@ safety_checkert::resultt bmc_all_propertiest::operator()() else { status() << "[" << it->first << "] " - << it->second.description << ": " << (it->second.failed?"FAILED":"OK") + << it->second.description << ": " << (it->second.failed?"FAILURE":"SUCCESS") << eom; } } From 88235c3f9953a6ffc4140de30027c5b2bd83d64f Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Sat, 11 Jun 2016 20:32:32 +0100 Subject: [PATCH 026/290] cleanup dead code --- src/ansi-c/c_typecheck_base.h | 39 ----------------------------------- 1 file changed, 39 deletions(-) diff --git a/src/ansi-c/c_typecheck_base.h b/src/ansi-c/c_typecheck_base.h index f2386a8e94d..8341a46d232 100644 --- a/src/ansi-c/c_typecheck_base.h +++ b/src/ansi-c/c_typecheck_base.h @@ -71,45 +71,6 @@ class c_typecheck_baset: // service functions // - // initializers - struct init_statet - { - protected: - const exprt array; - size_t pos; - - public: - explicit init_statet(const exprt &_array):array(_array), pos(0) - { - } - - size_t remaining() const - { - return array.operands().size()-pos; - } - - bool has_next() const - { - return pos() const - { - return &(array.operands()[pos]); - } - }; - virtual void do_initializer( exprt &initializer, const typet &type, From 7f930fc5336aef1376cf950083a5a412f66c793f Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Thu, 28 Apr 2016 14:13:03 +0000 Subject: [PATCH 027/290] Maintain alignment annotation when extracting from already-typechecked --- regression/ansi-c/gcc_attributes8/main.c | 23 +++++++++++++++++++++ regression/ansi-c/gcc_attributes8/test.desc | 8 +++++++ src/ansi-c/c_typecheck_type.cpp | 5 +++++ 3 files changed, 36 insertions(+) create mode 100644 regression/ansi-c/gcc_attributes8/main.c create mode 100644 regression/ansi-c/gcc_attributes8/test.desc diff --git a/regression/ansi-c/gcc_attributes8/main.c b/regression/ansi-c/gcc_attributes8/main.c new file mode 100644 index 00000000000..7cb7a0964a1 --- /dev/null +++ b/regression/ansi-c/gcc_attributes8/main.c @@ -0,0 +1,23 @@ +#define STATIC_ASSERT(condition) \ + int some_array[(condition) ? 1 : -1]; + +#ifdef __GNUC__ + +struct s +{ + char x; + + // struct-typed member with alignment + struct inner + { + int a; + } inner __attribute__((aligned(64))); +}; + +STATIC_ASSERT(sizeof(struct s)==128); + +#endif + +int main() +{ +} diff --git a/regression/ansi-c/gcc_attributes8/test.desc b/regression/ansi-c/gcc_attributes8/test.desc new file mode 100644 index 00000000000..466da18b2b5 --- /dev/null +++ b/regression/ansi-c/gcc_attributes8/test.desc @@ -0,0 +1,8 @@ +CORE +main.c + +^EXIT=0$ +^SIGNAL=0$ +-- +^warning: ignoring +^CONVERSION ERROR$ diff --git a/src/ansi-c/c_typecheck_type.cpp b/src/ansi-c/c_typecheck_type.cpp index f1420925c99..7890b2a1c8d 100644 --- a/src/ansi-c/c_typecheck_type.cpp +++ b/src/ansi-c/c_typecheck_type.cpp @@ -51,9 +51,14 @@ void c_typecheck_baset::typecheck_type(typet &type) c_qualifierst c_qualifiers(type); c_qualifiers+=c_qualifierst(type.subtype()); bool packed=type.get_bool(ID_C_packed); + exprt alignment=static_cast(type.find(ID_C_alignment)); + type.swap(type.subtype()); + c_qualifiers.write(type); if(packed) type.set(ID_C_packed, true); + if(alignment.is_not_nil()) type.add(ID_C_alignment, alignment); + return; // done } From 323cdcefda73162b93eb31bd391e68e6902acdbf Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 08:37:58 +0100 Subject: [PATCH 028/290] more HTML-ification --- doc/html-manual/cprover-source.shtml | 437 +++++++++++++++------------ 1 file changed, 251 insertions(+), 186 deletions(-) diff --git a/doc/html-manual/cprover-source.shtml b/doc/html-manual/cprover-source.shtml index fe4c3e02f23..8b6b8152f97 100644 --- a/doc/html-manual/cprover-source.shtml +++ b/doc/html-manual/cprover-source.shtml @@ -49,14 +49,14 @@ performed during type checking, which is done by a call to the

-#include 
-#include 
-#include 
-#include 
+#include <iostream&rt;
+#include <fstream&rt;
+#include <sstream&rt;
+#include <string&rt;
 
-#include 
-#include 
-#include 
+#include <ansi-c/ansi_c_language.h&rt;
+#include <util/cmdline.h&rt;
+#include <util/config.h&rt;
 
 int main(int argc, const char* argv[])
 {
@@ -70,7 +70,7 @@ int main(int argc, const char* argv[])
      config.ansi_c.include_paths=cmdl.get_values('I');
 
    // Set language to C
-   std::auto_ptr clang(new_ansi_c_language());
+   std::auto_ptr<languaget&rt; clang(new_ansi_c_language());
 
    // Symbol table
    contextt my_context;
@@ -79,17 +79,17 @@ int main(int argc, const char* argv[])
        sit != cmdl.args.end();sit++)
    {
      // Source code stream
-     std::ifstream in(sit->c_str());	
+     std::ifstream in(sit-&rt;c_str());	
 
      // Parse
-     clang->parse(in, "", std::cerr);
+     clang-&rt;parse(in, "", std::cerr);
 
      // Typecheck
-     clang->typecheck(my_context, *sit, std::cerr);
+     clang-&rt;typecheck(my_context, *sit, std::cerr);
   }
 
   // Do some final adjustements
-  clang->final(my_context, std::cerr);
+  clang-&rt;final(my_context, std::cerr);
 
   my_context.show(std::cout);
 
@@ -147,7 +147,7 @@ The field data of class dt is a (hashed) string
 representing the label of the nodes. The fields named_sub,
 comments and sub are links to childs. Edges are either
 labeled with a string or ordered. The string-labeled edges are stored in the
-map comments if their first character is '\#'. Otherwise, they are
+map comments if their first character is '#'. Otherwise, they are
 stored in the map named_sub. The labels of edges are unique for a
 given node; however, their ordering is not preserved. The field sub
 is a vector of nodes that is used for storing the ordered children. The order
@@ -175,8 +175,8 @@ The second method returns false if the label of the node is equal to "nil".
 
id
-const irep_idt &id();
-void id(const irep_idt &_data);
+const irep_idt &id();
+void id(const irep_idt &_data);
 

@@ -187,9 +187,9 @@ second method sets the label of the node.

find, add and get
-const irept &find(const irep_namet &name) const;
-irept &add(const irep_namet &name);
-const irep_idt &get(const irep_namet &name) const;
+const irept &find(const irep_namet &name) const;
+irept &add(const irep_namet &name);
+const irep_idt &get(const irep_namet &name) const;
 
    @@ -214,10 +214,10 @@ string is returned.
    set
    -void set(const irep_namet &name,
    -         const irep_idt &value);
    -void set(const irep_namet &name, const long value);
    -void set(const irep_namet &name, const irept &irep);
    +void set(const irep_namet &name,
    +         const irep_idt &value);
    +void set(const irep_namet &name, const long value);
    +void set(const irep_namet &name, const irept &irep);
     

    @@ -238,7 +238,7 @@ string and set as node-label of the new child.

    remove
    -void remove(const irep_namet &name);
    +void remove(const irep_namet &name);
     

    @@ -248,8 +248,8 @@ and removes it.

    move_to_sub and move_to_named_sub
    -void move_to_sub(irept &irep);
    -void move_to_named_sub(const irep_namet &name, irept &irep);
    +void move_to_sub(irept &irep);
    +void move_to_named_sub(const irep_namet &name, irept &irep);
     

    @@ -265,7 +265,7 @@ The second method does the same but for labeled edges.

    swap
    -void swap(irept &irep);
    +void swap(irept &irep);
     

    @@ -279,15 +279,15 @@ void make_nil();

-Set the label of the node to ``nil'' and remove all outgoing edges. +Set the label of the node to "nil" and remove all outgoing edges.

get_sub and get_named_sub and get_comments
-const subt &get_sub();
-const named_subt &get_named_sub();
-const named_subt &get_comments();
+const subt &get_sub();
+const named_subt &get_named_sub();
+const named_subt &get_comments();
 

@@ -321,8 +321,8 @@ The first method returns true if the a subtype node exists. is not

subtype and subtypes
-typet &subtype();
-typest &subtypes();
+typet &subtype();
+typest &subtypes();
 

@@ -333,45 +333,45 @@ The second method returns a reference to the vector of subtypes.

Subtypes of typet

-A number of subtypes of \texttt{typet} exist which allow convenient creation -and manipulation of \texttt{typet} objects for special types. +A number of subtypes of typet exist which allow convenient +creation and manipulation of typet objects for special types.

-\texttt{bool_typet} +bool_typet -\hline -\texttt{symbol_typet} - -\hline -\texttt{struct_typet}, \texttt{union_typet} - -\hline -\texttt{code_typet} - -\hline -\texttt{array_typet} - -\hline -\texttt{pointer_typet} + + + + + + + + + -\hline -\texttt{reference_typet} + -\hline -\texttt{bv_typet} + -\hline -\texttt{fixed_bv_typet} + -\hline -\texttt{floatbv_typet} + -\hline -\texttt{string_typet} + -\hline +
ClassDescription
Boolean type
Symbol type. Has edge ``identifier'' to a string value, which can be accessed with \texttt{get_identifier} and \texttt{set_identifier}.
Represent a struct, resp.~union types. Convenience functions to access components \texttt{components()}.
The type of a function/procedure. Convenience functions to access \texttt{arguments()} and \texttt{return_type()}.
Convenience function \texttt{size()} to access size of the array.
+symbol_typetSymbol type. Has edge "identifier" to a string value, which can be accessed with get_identifier and set_identifier.
+struct_typet, union_typetRepresent a struct, resp.~union types. Convenience functions to access components components().
+code_typetThe type of a function/procedure. Convenience functions to access arguments() and return_type().
+array_typetConvenience function size() to access size of the array.
+pointer_typet Pointer type, subtype stores the type of the object pointed to.
+reference_typet Represents a reference type, subtype stores the type of the object referenced to.
+bv_typet Represents a bit vector type with variable width.
+fixed_bv_typet Represents a bit vector that encodes a fixed-point number.
+floatbv_typet Represents a bit vector that encodes a floating-point number.
+string_typet Represents a string type.

Source Locations

@@ -379,7 +379,7 @@ and manipulation of \texttt{typet} objects for special types.

The class locationt inherits from the class irept. It is used to store locations in text files. It adds specialized methods to -manipulate the edges named ``file'', ``line'', ``column'', ``function''. +manipulate the edges named "file", "line", "column", "function".

Expressions

@@ -387,7 +387,7 @@ manipulate the edges named ``file'', ``line'', ``column'', ``function''.

The class exprt inherits from class irept. Expressions have operands and a type. This is modeled with two edges labeled -``operands" and ``type", respectively. The class exprt only adds +"operands" and "type", respectively. The class exprt only adds specialized methods for accessing operands and type information to the interface of irept.

@@ -400,7 +400,7 @@ interface of irept.
constructors
-explicit exprt(const irep_idt &id);
+explicit exprt(const irep_idt &id);
 

@@ -408,7 +408,7 @@ Creates an exprt object with a given label and no type.

-exprt(const irep_idt &id, const typet &type);
+exprt(const irep_idt &id, const typet &type);
 

@@ -418,8 +418,8 @@ Creates an exprt object with a given label and type.

type
-const typet &type() const;
-typet &type();
+const typet &type() const;
+typet &type();
 

@@ -439,7 +439,7 @@ Return true if the expression has operands.

operands
-const operandst &operands() const;
+const operandst &operands() const;
 

@@ -447,14 +447,14 @@ Return a reference to the vector of operands.

-const exprt &op0();
-const exprt &op1();
-const exprt &op2();
-const exprt &op3();
-exprt &op0();
-exprt &op1();
-exprt &op2();
-exprt &op3();
+const exprt &op0();
+const exprt &op1();
+const exprt &op2();
+const exprt &op3();
+exprt &op0();
+exprt &op1();
+exprt &op2();
+exprt &op3();
 

@@ -470,13 +470,13 @@ void make_bool(bool value);

-Turn the current exprt instance into a expression of type ``bool'' -with label ``constant'' and a single edge labeled ``value'', which points to -a new node with label either ``true'' or ``false''. +Turn the current exprt instance into a expression of type "bool" +with label "constant" and a single edge labeled "value", which points to +a new node with label either "true" or "false".

-void make_typecast(const typet &_type);
+void make_typecast(const typet &_type);
 

@@ -491,41 +491,52 @@ void make_not();

Turns the current exprt instance into an expression with label -``not'' of the same type as the original expression. The old value of the -instance is appended as the operand of the ``not''-node. If the original -expression is of type ``bool'', the result represents the negation of the +"not" of the same type as the original expression. The old value of the +instance is appended as the operand of the "not"-node. If the original +expression is of type "bool", the result represents the negation of the original expression with the following simplifications possibly applied:

-\begin{itemize} -\item $\neg \neg f = f$ -\item $\neg \mbox{true} = \mbox{false}$ -\item $\neg \mbox{false} = \mbox{true}$ -\end{itemize} +
    +
  • $\neg \neg f = f$
  • +
  • $\neg \mbox{true} = \mbox{false}$
  • +
  • $\neg \mbox{false} = \mbox{true}$
  • +
 void negate();
 

-Turns the current exprt instance into a negation of itself, depending on its type: +Turns the current exprt instance into a negation of itself, depending +on its type:

-\begin{itemize} -\item For boolean expressions, \texttt{make_not} is called. -\item For integers, the current instance is turned into a numeric negation expression ``unary-'' of its old value. Chains of ''unary-'' nodes and negations of integer constants are simplified. -\item For all other types, \texttt{irept::make_nil} is called. -\end{itemize} +
    + +
  • For boolean expressions, make_not is called.
  • + +
  • For integers, the current instance is turned into a numeric negation +expression "unary-" of its old value. Chains of "unary-" nodes and +negations of integer constants are simplified.
  • + +
  • For all other types, irept::make_nil is called.
  • + +
-bool sum(const exprt &expr);
-bool mul(const exprt &expr);
-bool subtract(const exprt &expr);
+bool sum(const exprt &expr);
+bool mul(const exprt &expr);
+bool subtract(const exprt &expr);
 

-Expect the ``this'' object and the function argument to be constants of the same numeric type. Turn the current \texttt{exprt} instance into a constant expression of the same type, whose ``value'' edge points to the result of the sum, product, or difference of the two expressions. -If the operation fails for some reason (e.g., the types are different), \texttt{true} is returned. +Expect the "this" object and the function argument to be constants of the +same numeric type. Turn the current exprt instance into a +constant expression of the same type, whose "value" edge points to the +result of the sum, product, or difference of the two expressions. If the +operation fails for some reason (e.g., the types are different), +true is returned.

Testing common expressions
@@ -535,14 +546,14 @@ bool is_constant() const;

-Returns true if the expression label is ``constant''. +Returns true if the expression label is "constant".

 bool is_boolean() const;
 

-Returns true if the label of the type is ``bool''. +Returns true if the label of the type is "bool".

 bool is_false() const;
@@ -550,7 +561,7 @@ bool is_true() const;
 

-The first function returns true if the expression is a boolean constant with value ``false''. The second function returns true for any boolean constant that is not of value ``false". +The first function returns true if the expression is a boolean constant with value "false". The second function returns true for any boolean constant that is not of value "false".

@@ -568,66 +579,96 @@ value "1".
 

Subtypes of exprt

-A number of subtypes of \texttt{exprt} provide further convenience functions +A number of subtypes of exprt provide further convenience functions for edge access or other specialized behaviour:

+ - - -\texttt{true_exprt} - -\hline -\texttt{false_exprt} - -\hline -\texttt{symbol_exprt} - -\hline -\texttt{predicate_exprt} - -\hline -\texttt{binary_relation_exprt : predicate_exprt} - -\hline -\texttt{equality_exprt : binary_relation_exprt} - -\hline -\texttt{ieee_float_equal_exprt : binary_relation_exprt} + + + + + +true_exprt + + + + + + + + + + + + + + + + + + + + + + + + -\hline -\texttt{index_exprt} - -\hline -\texttt{typecast_exprt} - -\hline -\texttt{and_exprt}, -\texttt{implies_exprt}, -\texttt{or_exprt}, -\texttt{not_exprt} - -\hline -\texttt{address_of_exprt} - -\hline -\texttt{dereference_exprt} - -\hline -\texttt{if_exprt} - -\hline -\texttt{member_exprt} - -%\hline -%\multicolumn{2}{l}{} -%\multicolumn{2}{l}{\it util/std_code.h} -%\hline -%\texttt{codet} - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassDescription
\texttt{transt}Represents a SMV-style transition system with invariants \texttt{invar()}, initial state \texttt{init()} and transition function \texttt{trans()}. -
Boolean constant true expression.
Boolean constant false expression.
Represents a symbol (e.g., a variable occurrence), convenience function for manipulating ``identifier''-edge \texttt{set_identifier} and \texttt{get_identifier}
Convenience constructors to create expressions of type ``bool''.
Convenience functions to create and manipulate binary expressions of type ``bool''.
Convenience functions to create and manipulate equality expressions such as ``a == b".
transtRepresents a SMV-style transition system with invariants invar(), initial state init() and transition function trans().
Boolean constant true expression.
+false_exprtBoolean constant false expression.
+symbol_exprtRepresents a symbol (e.g., a variable occurrence), convenience function for manipulating "identifier"-edge set_identifier and get_identifier
+predicate_exprtConvenience constructors to create expressions of type "bool".
+binary_relation_exprt : predicate_exprtConvenience functions to create and manipulate binary expressions of type "bool".
+equality_exprt : binary_relation_exprtConvenience functions to create and manipulate equality expressions such as "a == b".
+ieee_float_equal_exprt : binary_relation_exprt Convenience functions to create and manipulate equality expressions between floating-point numbers. -
Represents an array access expression such as ``a[i]''. Convenience functions \texttt{array()} and \texttt{index()} for accessing the array expressions and indexing expression.
Represents a cast to the type of the expression.
Representations of logical operators with convenience constructors.
Representation of a C-style \texttt{\&a} address-of operation. Convenience function \texttt{object()} for accessing operand.
Representation of a C-style \texttt{*a} pointer-dereference operation. Convenience function \texttt{object()} for accessing operand.
Representation of a conditional expresion, with convenience functions \texttt{cond()}, \texttt{true_case()} and \texttt{false_case()} for accessing operands.
Represents a \texttt{some_struct.some_field} member access.
Represents a segment of code.
+index_exprtRepresents an array access expression such as "a[i]". Convenience functions array() and index() for accessing the array expressions and indexing expression.
+typecast_exprtRepresents a cast to the type of the expression.
+and_exprt, +implies_exprt, +or_exprt, +not_exprtRepresentations of logical operators with convenience constructors.
+address_of_exprtRepresentation of a C-style \&a address-of operation. Convenience function object() for accessing operand.
+dereference_exprtRepresentation of a C-style *a pointer-dereference operation. Convenience function object() for accessing operand.
+if_exprtRepresentation of a conditional expresion, with convenience functions cond(), true_case() and false_case() for accessing operands.
+member_exprtRepresents a some_struct.some_field member access.
+codetRepresents a segment of code.

Symbols and the Symbol Table

@@ -635,8 +676,8 @@ for edge access or other specialized behaviour:

Symbol

-A symbol is an object of class symbolt. This class -is declared in ``util/symbol.h". The code below shows a partial +A symbol is an object of class symbolt. This class +is declared in "util/symbol.h". The code below shows a partial declaration of the interface:

@@ -652,7 +693,7 @@ to symbols:

Symbol Table

-A symbol table is an object of class contextt. This class +A symbol table is an object of class contextt. This class is declared in "util/context.h". The code below shows a partial declaration of the interface:

@@ -674,15 +715,15 @@ whose definition can be found again in

-In the class \texttt{goto_programt}, the control flow graph is represented +In the class goto_programt, the control flow graph is represented as a mixture of sequential transitions between nodes, and non-sequential transitions at goto-nodes. The sequential flow of the program is captured -by the list \texttt{instructions} that is a field of the class -\texttt{goto_programt}. Transitions via goto statements are represented in -the list \texttt{targets}, which is a field of the class -\texttt{goto_programt::instructiont}, i.e., each goto-instruction carries a -list of possible jump destinations. The latter list \texttt{targets} is a -list of iterators which point to elements of the list \texttt{instructions}. +by the list instructions that is a field of the class +goto_programt. Transitions via goto statements are represented in +the list targets, which is a field of the class +goto_programt::instructiont, i.e., each goto-instruction carries a +list of possible jump destinations. The latter list targets is a +list of iterators which point to elements of the list instructions. An illustration is given in Figure \ref{fig:goto_program}.

@@ -691,36 +732,60 @@ An illustration is given in Figure \ref{fig:goto_program}.

Instructions can have a number of different types as represented by -\texttt{enum goto_program_instruction_typet} and can be accessed via the -field \texttt{type} in \texttt{instructiont}. These include: +enum goto_program_instruction_typet and can be accessed via the +field type in instructiont. These include:

-\begin{description} -\item[\texttt{GOTO}] Represents a non-deterministic branch to the instructions given in the list \texttt{targets}. Goto statements are guarded, i.e., the non-deterministic branch is only taken if the expression in \texttt{guard} evaluates to true, otherwise the program continues sequentially. + + + + + + + + + + + + + + + + + + + + + + + + + +
GOTORepresents a non-deterministic branch to the instructions given in the list targets. Goto statements are guarded, i.e., the non-deterministic branch is only taken if the expression in guard evaluates to true, otherwise the program continues sequentially. Guarded gotos can be used, for example, to model if statements. The guard is then set to the negated condition of the statement, and goto target is set to bypass the conditionally executed code if this guard evaluates to true. -\item[\texttt{ASSUME}] An assumption statement that restricts viable paths reaching the instruction location to the ones that make the expression \texttt{guard} evaluate to true. -\item[\texttt{ASSERT}] An assertion whose \texttt{guard} is checked for validity when the instruction is reached. -\item[\texttt{RETURN}] A return statement in a function. -\item[\texttt{FUNCTION_END}] Denotes the end of a function. -\item[\texttt{ASSIGN}] A variable assignment. -\item[\texttt{SKIP}] No operation. -\item[\texttt{OTHER}] Any operation not covered by \texttt{enum goto_program_instruction_typet}. -\end{description} - -

-A number of convenience functions in \texttt{instructiont}, such as -\texttt{is_goto()}, \texttt{is_assume()}, etc., simplify type queries. +

ASSUMEAn assumption statement that restricts viable paths reaching the instruction location to the ones that make the expression guard evaluate to true. +
ASSERTAn assertion whose guard is checked for validity when the instruction is reached. +
RETURNA return statement in a function. +
FUNCTION_ENDDenotes the end of a function. +
ASSIGNA variable assignment. +
SKIPNo operation. +
OTHERAny operation not covered by enum goto_program_instruction_typet. +
+ +

+A number of convenience functions in instructiont, such as +is_goto(), is_assume(), etc., simplify type queries. The following code segment shows a partial interface declaration of -\texttt{goto_program_template} and \texttt{instructiont}. +goto_program_template and instructiont.

-template 
+template <class codeT, class guardT&rt;
 class goto_program_templatet
 {
 public:
   //list of instruction type
-  typedef std::list instructionst;
+  typedef std::list<class instructiont&rt; instructionst;
 
   //a reference to an instruction in the list
   typedef typename 
@@ -737,7 +802,7 @@ public:
   target_numberst target_numbers;
 
   //Get the successors of a given instruction 
-  void get_successors(targett target, targetst &successors); 
+  void get_successors(targett target, targetst &successors); 
 
   ...
 
@@ -763,7 +828,7 @@ public:
     targetst targets;
    
     //set of all predecessors (sequential, and gotos)
-    std::set incoming_edges;
+    std::set<targett&rt; incoming_edges;
     
     // a globally unique number to identify a 
     // program location. It is guaranteed to be 

From 8b58e3a806257eb63ec67f01f1db1f5ba6bd5856 Mon Sep 17 00:00:00 2001
From: Daniel Kroening 
Date: Mon, 13 Jun 2016 09:44:42 +0100
Subject: [PATCH 029/290] fixes

---
 doc/html-manual/cprover-source.shtml | 137 ++++++++++++++-------------
 1 file changed, 69 insertions(+), 68 deletions(-)

diff --git a/doc/html-manual/cprover-source.shtml b/doc/html-manual/cprover-source.shtml
index 8b6b8152f97..5737605a07c 100644
--- a/doc/html-manual/cprover-source.shtml
+++ b/doc/html-manual/cprover-source.shtml
@@ -49,14 +49,14 @@ performed during type checking, which is done by a call to the
 

-#include <iostream&rt;
-#include <fstream&rt;
-#include <sstream&rt;
-#include <string&rt;
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <string>
 
-#include <ansi-c/ansi_c_language.h&rt;
-#include <util/cmdline.h&rt;
-#include <util/config.h&rt;
+#include <ansi-c/ansi_c_language.h>
+#include <util/cmdline.h>
+#include <util/config.h>
 
 int main(int argc, const char* argv[])
 {
@@ -70,7 +70,7 @@ int main(int argc, const char* argv[])
      config.ansi_c.include_paths=cmdl.get_values('I');
 
    // Set language to C
-   std::auto_ptr<languaget&rt; clang(new_ansi_c_language());
+   std::auto_ptr<languaget> clang(new_ansi_c_language());
 
    // Symbol table
    contextt my_context;
@@ -79,17 +79,17 @@ int main(int argc, const char* argv[])
        sit != cmdl.args.end();sit++)
    {
      // Source code stream
-     std::ifstream in(sit-&rt;c_str());	
+     std::ifstream in(sit->c_str());	
 
      // Parse
-     clang-&rt;parse(in, "", std::cerr);
+     clang->parse(in, "", std::cerr);
 
      // Typecheck
-     clang-&rt;typecheck(my_context, *sit, std::cerr);
+     clang->typecheck(my_context, *sit, std::cerr);
   }
 
   // Do some final adjustements
-  clang-&rt;final(my_context, std::cerr);
+  clang->final(my_context, std::cerr);
 
   my_context.show(std::cout);
 
@@ -339,46 +339,47 @@ creation and manipulation of typet objects for special types.
 
 
-bool_typet
+
+
-
+
+
-
-
-
+
+
+
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
-
-
+
+
 
ClassDescription
bool_typet Boolean type
-symbol_typet
symbol_typet Symbol type. Has edge "identifier" to a string value, which can be accessed with get_identifier and set_identifier.
-struct_typet, union_typetRepresent a struct, resp.~union types. Convenience functions to access components components().
-code_typet
struct_typet, union_typetRepresent a struct, resp. union types. Convenience functions to access components components().
code_typet The type of a function/procedure. Convenience functions to access arguments() and return_type().
-array_typet
array_typet Convenience function size() to access size of the array.
-pointer_typet
pointer_typet Pointer type, subtype stores the type of the object pointed to.
-reference_typet
reference_typet Represents a reference type, subtype stores the type of the object referenced to.
-bv_typet
bv_typet Represents a bit vector type with variable width.
-fixed_bv_typet
fixed_bv_typet Represents a bit vector that encodes a fixed-point number.
-floatbv_typet
floatbv_typet Represents a bit vector that encodes a floating-point number.
-string_typetRepresents a string type.
+ +
string_typetRepresents a string type.

Source Locations

-The class locationt inherits from the class irept. It is -used to store locations in text files. It adds specialized methods to +The class source_locationt inherits from the class irept. It +is used to store locations in text files. It adds specialized methods to manipulate the edges named "file", "line", "column", "function".

@@ -498,9 +499,9 @@ original expression with the following simplifications possibly applied:

    -
  • $\neg \neg f = f$
  • -
  • $\neg \mbox{true} = \mbox{false}$
  • -
  • $\neg \mbox{false} = \mbox{true}$
  • +
  • \neg \neg f = f$
  • +
  • \neg true = false
  • +
  • \neg false = true
@@ -516,7 +517,7 @@ on its type:
 
 
  • For boolean expressions, make_not is called.
  • -
  • For integers, the current instance is turned into a numeric negation +
  • For integers, the current instance is turned into a numeric negation expression "unary-" of its old value. Chains of "unary-" nodes and negations of integer constants are simplified.
  • @@ -587,7 +588,7 @@ for edge access or other specialized behaviour: ClassDescription -transt +transt Represents a SMV-style transition system with invariants invar(), initial state init() and transition function trans(). @@ -595,48 +596,48 @@ for edge access or other specialized behaviour: Boolean constant true expression. - + false_exprt Boolean constant false expression. - + symbol_exprt Represents a symbol (e.g., a variable occurrence), convenience function for manipulating "identifier"-edge set_identifier and get_identifier - + predicate_exprt Convenience constructors to create expressions of type "bool". - + binary_relation_exprt : predicate_exprt Convenience functions to create and manipulate binary expressions of type "bool". - + equality_exprt : binary_relation_exprt Convenience functions to create and manipulate equality expressions such as "a == b". - + ieee_float_equal_exprt : binary_relation_exprt Convenience functions to create and manipulate equality expressions between floating-point numbers. - + index_exprt Represents an array access expression such as "a[i]". Convenience functions array() and index() for accessing the array expressions and indexing expression. - + typecast_exprt Represents a cast to the type of the expression. - + and_exprt, implies_exprt, or_exprt, @@ -644,27 +645,27 @@ for edge access or other specialized behaviour: Representations of logical operators with convenience constructors. - + address_of_exprt Representation of a C-style \&a address-of operation. Convenience function object() for accessing operand. - + dereference_exprt Representation of a C-style *a pointer-dereference operation. Convenience function object() for accessing operand. - + if_exprt Representation of a conditional expresion, with convenience functions cond(), true_case() and false_case() for accessing operands. - + member_exprt Represents a some_struct.some_field member access. - + codet Represents a segment of code. @@ -737,36 +738,36 @@ field type in instructiont. These include:

    - + - + - + - + - + - + - + - + @@ -780,12 +781,12 @@ The following code segment shows a partial interface declaration of

    -template <class codeT, class guardT&rt;
    +template <class codeT, class guardT>
     class goto_program_templatet
     {
     public:
       //list of instruction type
    -  typedef std::list<class instructiont&rt; instructionst;
    +  typedef std::list<class instructiont> instructionst;
     
       //a reference to an instruction in the list
       typedef typename 
    @@ -828,7 +829,7 @@ public:
         targetst targets;
        
         //set of all predecessors (sequential, and gotos)
    -    std::set<targett&rt; incoming_edges;
    +    std::set<targett> incoming_edges;
         
         // a globally unique number to identify a 
         // program location. It is guaranteed to be 
    
    From c41008b1a0e350e7888ea8afac43af7905947079 Mon Sep 17 00:00:00 2001
    From: Daniel Kroening 
    Date: Mon, 13 Jun 2016 09:48:31 +0100
    Subject: [PATCH 030/290] fixes
    
    ---
     doc/html-manual/cprover-source.shtml | 74 ++++++++++++++--------------
     1 file changed, 36 insertions(+), 38 deletions(-)
    
    diff --git a/doc/html-manual/cprover-source.shtml b/doc/html-manual/cprover-source.shtml
    index 5737605a07c..57e1b8b4e03 100644
    --- a/doc/html-manual/cprover-source.shtml
    +++ b/doc/html-manual/cprover-source.shtml
    @@ -592,48 +592,40 @@ for edge access or other specialized behaviour:
     
    -true_exprt + - + - + - + - + - + - + - + - + @@ -645,29 +637,24 @@ for edge access or other specialized behaviour: - + - + - + - + - - + +
    GOTO
    GOTO Represents a non-deterministic branch to the instructions given in the list targets. Goto statements are guarded, i.e., the non-deterministic branch is only taken if the expression in guard evaluates to true, otherwise the program continues sequentially. Guarded gotos can be used, for example, to model if statements. The guard is then set to the negated condition of the statement, and goto target is set to bypass the conditionally executed code if this guard evaluates to true.
    ASSUME
    ASSUME An assumption statement that restricts viable paths reaching the instruction location to the ones that make the expression guard evaluate to true.
    ASSERT
    ASSERT An assertion whose guard is checked for validity when the instruction is reached.
    RETURN
    RETURN A return statement in a function.
    FUNCTION_END
    END_FUNCTION Denotes the end of a function.
    ASSIGN
    ASSIGN A variable assignment.
    SKIP
    SKIP No operation.
    OTHER
    OTHER Any operation not covered by enum goto_program_instruction_typet.
    Represents a SMV-style transition system with invariants invar(), initial state init() and transition function trans().
    true_exprt Boolean constant true expression.
    -false_exprt
    false_exprt Boolean constant false expression.
    -symbol_exprt
    symbol_exprt Represents a symbol (e.g., a variable occurrence), convenience function for manipulating "identifier"-edge set_identifier and get_identifier
    -predicate_exprt
    predicate_exprt Convenience constructors to create expressions of type "bool".
    -binary_relation_exprt : predicate_exprt
    binary_relation_exprt : predicate_exprt Convenience functions to create and manipulate binary expressions of type "bool".
    -equality_exprt : binary_relation_exprt
    equality_exprt : binary_relation_exprt Convenience functions to create and manipulate equality expressions such as "a == b".
    -ieee_float_equal_exprt : binary_relation_exprt
    ieee_float_equal_exprt : binary_relation_exprt Convenience functions to create and manipulate equality expressions between floating-point numbers.
    -index_exprt
    index_exprt Represents an array access expression such as "a[i]". Convenience functions array() and index() for accessing the array expressions and indexing expression.
    -typecast_exprt
    typecast_exprt Represents a cast to the type of the expression.
    Representations of logical operators with convenience constructors.
    -address_of_exprt
    address_of_exprt Representation of a C-style \&a address-of operation. Convenience function object() for accessing operand.
    -dereference_exprt
    dereference_exprt Representation of a C-style *a pointer-dereference operation. Convenience function object() for accessing operand.
    -if_exprt
    if_exprt Representation of a conditional expresion, with convenience functions cond(), true_case() and false_case() for accessing operands.
    -member_exprt
    member_exprt Represents a some_struct.some_field member access.
    -codetRepresents a segment of code.
    codetRepresents a segment of code.
    @@ -725,7 +712,7 @@ the list targets, which is a field of the class goto_programt::instructiont, i.e., each goto-instruction carries a list of possible jump destinations. The latter list targets is a list of iterators which point to elements of the list instructions. -An illustration is given in Figure \ref{fig:goto_program}. +An illustration is given in the figure below.

    @@ -739,36 +726,47 @@ field type in instructiont. These include: - - - - - - - -
    GOTORepresents a non-deterministic branch to the instructions given in the list targets. Goto statements are guarded, i.e., the non-deterministic branch is only taken if the expression in guard evaluates to true, otherwise the program continues sequentially. -Guarded gotos can be used, for example, to model if statements. The guard is then set to the negated condition of the statement, and goto target is set to bypass the conditionally executed code if this guard evaluates to true. +Represents a non-deterministic branch to the instructions given in the +list targets. Goto statements are guarded, i.e., the +non-deterministic branch is only taken if the expression in +guard evaluates to true, otherwise the program continues +sequentially. Guarded gotos can be used, for example, to model if +statements. The guard is then set to the negated condition of the +statement, and goto target is set to bypass the conditionally executed code +if this guard evaluates to true. +
    ASSUMEAn assumption statement that restricts viable paths reaching the instruction location to the ones that make the expression guard evaluate to true. +An assumption statement that restricts viable paths reaching the +instruction location to the ones that make the expression guard +evaluate to true.
    ASSERTAn assertion whose guard is checked for validity when the instruction is reached. +An assertion whose guard is checked for validity when the instruction is +reached.
    RETURNA return statement in a function. +A return statement in a function.
    END_FUNCTIONDenotes the end of a function. +Denotes the end of a function.
    ASSIGNA variable assignment. +A variable assignment.
    SKIPNo operation. +No operation.
    OTHERAny operation not covered by enum goto_program_instruction_typet. +Any operation not covered by enum +goto_program_instruction_typet.
    From bb93c7b862b5963f4ad28fbba142b0ec3a48d403 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 11:44:28 +0100 Subject: [PATCH 031/290] added highlight package with C++/C# option --- doc/html-manual/highlight/CHANGES.md | 1429 +++++++++++++++++ doc/html-manual/highlight/LICENSE | 24 + doc/html-manual/highlight/README.md | 141 ++ doc/html-manual/highlight/README.ru.md | 128 ++ doc/html-manual/highlight/highlight.pack.js | 2 + doc/html-manual/highlight/styles/agate.css | 108 ++ .../highlight/styles/androidstudio.css | 66 + .../highlight/styles/arduino-light.css | 88 + doc/html-manual/highlight/styles/arta.css | 73 + doc/html-manual/highlight/styles/ascetic.css | 45 + .../highlight/styles/atelier-cave-dark.css | 83 + .../highlight/styles/atelier-cave-light.css | 85 + .../highlight/styles/atelier-dune-dark.css | 69 + .../highlight/styles/atelier-dune-light.css | 69 + .../highlight/styles/atelier-estuary-dark.css | 84 + .../styles/atelier-estuary-light.css | 84 + .../highlight/styles/atelier-forest-dark.css | 69 + .../highlight/styles/atelier-forest-light.css | 69 + .../highlight/styles/atelier-heath-dark.css | 69 + .../highlight/styles/atelier-heath-light.css | 69 + .../styles/atelier-lakeside-dark.css | 69 + .../styles/atelier-lakeside-light.css | 69 + .../highlight/styles/atelier-plateau-dark.css | 84 + .../styles/atelier-plateau-light.css | 84 + .../highlight/styles/atelier-savanna-dark.css | 84 + .../styles/atelier-savanna-light.css | 84 + .../highlight/styles/atelier-seaside-dark.css | 69 + .../styles/atelier-seaside-light.css | 69 + .../styles/atelier-sulphurpool-dark.css | 69 + .../styles/atelier-sulphurpool-light.css | 69 + .../highlight/styles/brown-paper.css | 64 + .../highlight/styles/brown-papersq.png | Bin 0 -> 18198 bytes .../highlight/styles/codepen-embed.css | 60 + .../highlight/styles/color-brewer.css | 71 + doc/html-manual/highlight/styles/dark.css | 63 + doc/html-manual/highlight/styles/darkula.css | 74 + doc/html-manual/highlight/styles/default.css | 99 ++ doc/html-manual/highlight/styles/docco.css | 97 ++ doc/html-manual/highlight/styles/dracula.css | 76 + doc/html-manual/highlight/styles/far.css | 71 + .../highlight/styles/foundation.css | 88 + .../highlight/styles/github-gist.css | 71 + doc/html-manual/highlight/styles/github.css | 99 ++ .../highlight/styles/googlecode.css | 89 + .../highlight/styles/grayscale.css | 101 ++ .../highlight/styles/gruvbox-dark.css | 108 ++ .../highlight/styles/gruvbox-light.css | 108 ++ .../highlight/styles/hopscotch.css | 83 + doc/html-manual/highlight/styles/hybrid.css | 102 ++ doc/html-manual/highlight/styles/idea.css | 97 ++ doc/html-manual/highlight/styles/ir-black.css | 73 + .../highlight/styles/kimbie.dark.css | 74 + .../highlight/styles/kimbie.light.css | 74 + doc/html-manual/highlight/styles/magula.css | 70 + .../highlight/styles/mono-blue.css | 59 + .../highlight/styles/monokai-sublime.css | 83 + doc/html-manual/highlight/styles/monokai.css | 70 + doc/html-manual/highlight/styles/obsidian.css | 88 + .../highlight/styles/paraiso-dark.css | 72 + .../highlight/styles/paraiso-light.css | 72 + doc/html-manual/highlight/styles/pojoaque.css | 83 + doc/html-manual/highlight/styles/pojoaque.jpg | Bin 0 -> 1186 bytes .../highlight/styles/purebasic.css | 96 ++ .../highlight/styles/qtcreator_dark.css | 83 + .../highlight/styles/qtcreator_light.css | 83 + .../highlight/styles/railscasts.css | 106 ++ doc/html-manual/highlight/styles/rainbow.css | 85 + .../highlight/styles/school-book.css | 72 + .../highlight/styles/school-book.png | Bin 0 -> 486 bytes .../highlight/styles/solarized-dark.css | 84 + .../highlight/styles/solarized-light.css | 84 + doc/html-manual/highlight/styles/sunburst.css | 102 ++ .../highlight/styles/tomorrow-night-blue.css | 75 + .../styles/tomorrow-night-bright.css | 74 + .../styles/tomorrow-night-eighties.css | 74 + .../highlight/styles/tomorrow-night.css | 75 + doc/html-manual/highlight/styles/tomorrow.css | 72 + doc/html-manual/highlight/styles/vs.css | 68 + doc/html-manual/highlight/styles/xcode.css | 93 ++ doc/html-manual/highlight/styles/xt256.css | 92 ++ doc/html-manual/highlight/styles/zenburn.css | 80 + 81 files changed, 7541 insertions(+) create mode 100644 doc/html-manual/highlight/CHANGES.md create mode 100644 doc/html-manual/highlight/LICENSE create mode 100644 doc/html-manual/highlight/README.md create mode 100644 doc/html-manual/highlight/README.ru.md create mode 100644 doc/html-manual/highlight/highlight.pack.js create mode 100644 doc/html-manual/highlight/styles/agate.css create mode 100644 doc/html-manual/highlight/styles/androidstudio.css create mode 100644 doc/html-manual/highlight/styles/arduino-light.css create mode 100644 doc/html-manual/highlight/styles/arta.css create mode 100644 doc/html-manual/highlight/styles/ascetic.css create mode 100644 doc/html-manual/highlight/styles/atelier-cave-dark.css create mode 100644 doc/html-manual/highlight/styles/atelier-cave-light.css create mode 100644 doc/html-manual/highlight/styles/atelier-dune-dark.css create mode 100644 doc/html-manual/highlight/styles/atelier-dune-light.css create mode 100644 doc/html-manual/highlight/styles/atelier-estuary-dark.css create mode 100644 doc/html-manual/highlight/styles/atelier-estuary-light.css create mode 100644 doc/html-manual/highlight/styles/atelier-forest-dark.css create mode 100644 doc/html-manual/highlight/styles/atelier-forest-light.css create mode 100644 doc/html-manual/highlight/styles/atelier-heath-dark.css create mode 100644 doc/html-manual/highlight/styles/atelier-heath-light.css create mode 100644 doc/html-manual/highlight/styles/atelier-lakeside-dark.css create mode 100644 doc/html-manual/highlight/styles/atelier-lakeside-light.css create mode 100644 doc/html-manual/highlight/styles/atelier-plateau-dark.css create mode 100644 doc/html-manual/highlight/styles/atelier-plateau-light.css create mode 100644 doc/html-manual/highlight/styles/atelier-savanna-dark.css create mode 100644 doc/html-manual/highlight/styles/atelier-savanna-light.css create mode 100644 doc/html-manual/highlight/styles/atelier-seaside-dark.css create mode 100644 doc/html-manual/highlight/styles/atelier-seaside-light.css create mode 100644 doc/html-manual/highlight/styles/atelier-sulphurpool-dark.css create mode 100644 doc/html-manual/highlight/styles/atelier-sulphurpool-light.css create mode 100644 doc/html-manual/highlight/styles/brown-paper.css create mode 100644 doc/html-manual/highlight/styles/brown-papersq.png create mode 100644 doc/html-manual/highlight/styles/codepen-embed.css create mode 100644 doc/html-manual/highlight/styles/color-brewer.css create mode 100644 doc/html-manual/highlight/styles/dark.css create mode 100644 doc/html-manual/highlight/styles/darkula.css create mode 100644 doc/html-manual/highlight/styles/default.css create mode 100644 doc/html-manual/highlight/styles/docco.css create mode 100644 doc/html-manual/highlight/styles/dracula.css create mode 100644 doc/html-manual/highlight/styles/far.css create mode 100644 doc/html-manual/highlight/styles/foundation.css create mode 100644 doc/html-manual/highlight/styles/github-gist.css create mode 100644 doc/html-manual/highlight/styles/github.css create mode 100644 doc/html-manual/highlight/styles/googlecode.css create mode 100644 doc/html-manual/highlight/styles/grayscale.css create mode 100644 doc/html-manual/highlight/styles/gruvbox-dark.css create mode 100644 doc/html-manual/highlight/styles/gruvbox-light.css create mode 100644 doc/html-manual/highlight/styles/hopscotch.css create mode 100644 doc/html-manual/highlight/styles/hybrid.css create mode 100644 doc/html-manual/highlight/styles/idea.css create mode 100644 doc/html-manual/highlight/styles/ir-black.css create mode 100644 doc/html-manual/highlight/styles/kimbie.dark.css create mode 100644 doc/html-manual/highlight/styles/kimbie.light.css create mode 100644 doc/html-manual/highlight/styles/magula.css create mode 100644 doc/html-manual/highlight/styles/mono-blue.css create mode 100644 doc/html-manual/highlight/styles/monokai-sublime.css create mode 100644 doc/html-manual/highlight/styles/monokai.css create mode 100644 doc/html-manual/highlight/styles/obsidian.css create mode 100644 doc/html-manual/highlight/styles/paraiso-dark.css create mode 100644 doc/html-manual/highlight/styles/paraiso-light.css create mode 100644 doc/html-manual/highlight/styles/pojoaque.css create mode 100644 doc/html-manual/highlight/styles/pojoaque.jpg create mode 100644 doc/html-manual/highlight/styles/purebasic.css create mode 100644 doc/html-manual/highlight/styles/qtcreator_dark.css create mode 100644 doc/html-manual/highlight/styles/qtcreator_light.css create mode 100644 doc/html-manual/highlight/styles/railscasts.css create mode 100644 doc/html-manual/highlight/styles/rainbow.css create mode 100644 doc/html-manual/highlight/styles/school-book.css create mode 100644 doc/html-manual/highlight/styles/school-book.png create mode 100644 doc/html-manual/highlight/styles/solarized-dark.css create mode 100644 doc/html-manual/highlight/styles/solarized-light.css create mode 100644 doc/html-manual/highlight/styles/sunburst.css create mode 100644 doc/html-manual/highlight/styles/tomorrow-night-blue.css create mode 100644 doc/html-manual/highlight/styles/tomorrow-night-bright.css create mode 100644 doc/html-manual/highlight/styles/tomorrow-night-eighties.css create mode 100644 doc/html-manual/highlight/styles/tomorrow-night.css create mode 100644 doc/html-manual/highlight/styles/tomorrow.css create mode 100644 doc/html-manual/highlight/styles/vs.css create mode 100644 doc/html-manual/highlight/styles/xcode.css create mode 100644 doc/html-manual/highlight/styles/xt256.css create mode 100644 doc/html-manual/highlight/styles/zenburn.css diff --git a/doc/html-manual/highlight/CHANGES.md b/doc/html-manual/highlight/CHANGES.md new file mode 100644 index 00000000000..377202d8bd8 --- /dev/null +++ b/doc/html-manual/highlight/CHANGES.md @@ -0,0 +1,1429 @@ +## Version 9.4.0 + +New languages: + +- *PureBASIC* by [Tristano Ajmone][] +- *BNF* by [Oleg Efimov][] +- *Ada* by [Lars Schulna][] + +New styles: + +- *PureBASIC* by [Tristano Ajmone][] + +Improvements to existing languages and styles: + +- We now highlight function declarations in Go. +- [Taisuke Fujimoto][] contributed very convoluted rules for raw and + interpolated strings in C#. +- [Boone Severson][] updated Verilog to comply with IEEE 1800-2012 + SystemVerilog. +- [Victor Zhou][] improved rules for comments and strings in PowerShell files. +- [Janis Voigtländer][] updated the definition of Elm to version 0.17 of the + languages. Elm is now featured on the front page of . +- Special variable `$this` is highlighted as a keyword in PHP. +- `usize` and `isize` are now highlighted in Rust. +- Fixed labels and directives in x86 assembler. + +[Tristano Ajmone]: https://github.com/tajmone +[Taisuke Fujimoto]: https://github.com/temp-impl +[Oleg Efimov]: https://github.com/Sannis +[Boone Severson]: https://github.com/BooneJS +[Victor Zhou]: https://github.com/OiCMudkips +[Lars Schulna]: https://github.com/captain-hanuta +[Janis Voigtländer]: https://github.com/jvoigtlaender + + +## Version 9.3.0 + +New languages: + +- *Tagger Script* by [Philipp Wolfer][] +- *MoonScript* by [Billy Quith][] + +New styles: + +- *xt256* by [Herbert Shin][] + +Improvements to existing languages and styles: + +- More robust handling of unquoted HTML tag attributes +- Relevance tuning for QML which was unnecessary eager at seizing other + languages' code +- Improve GAMS language parsing +- Fixed a bunch of bugs around selectors in Less +- Kotlin's got a new definition for annotations, updated keywords and other + minor improvements +- Added `move` to Rust keywords +- Markdown now recognizes \`\`\`-fenced code blocks +- Improved detection of function declarations in C++ and C# + +[Philipp Wolfer]: https://github.com/phw +[Billy Quith]: https://github.com/billyquith +[Herbert Shin]: https://github.com/initbar + + +## Version 9.2.0 + +New languages: + +- *QML* by [John Foster][] +- *HTMLBars* by [Michael Johnston][] +- *CSP* by [Taras][] +- *Maxima* by [Robert Dodier][] + +New styles: + +- *Gruvbox* by [Qeole][] +- *Dracula* by [Denis Ciccale][] + +Improvements to existing languages and styles: + +- We now correctly handle JSX with arbitrary node tree depth. +- Argument list for `(lambda)` in Scheme is no longer highlighted as a function + call. +- Stylus syntax doesn't break on valid CSS. +- More correct handling of comments and strings and other improvements for + VimScript. +- More subtle work on the default style. +- We now use anonymous modules for AMD. +- `macro_rules!` is now recognized as a built-in in Rust. + +[John Foster]: https://github.com/jf990 +[Qeole]: https://github.com/Qeole +[Denis Ciccale]: https://github.com/dciccale +[Michael Johnston]: https://github.com/lastobelus +[Taras]: https://github.com/oxdef +[Robert Dodier]: https://github.com/robert-dodier + + +## Version 9.1.0 + +New languages: + +- *Stan* by [Brendan Rocks][] +- *BASIC* by [Raphaël Assénat][] +- *GAUSS* by [Matt Evans][] +- *DTS* by [Martin Braun][] +- *Arduino* by [Stefania Mellai][] + +New Styles: + +- *Arduino Light* by [Stefania Mellai][] + +Improvements to existing languages and styles: + +- Handle return type annotations in Python +- Allow shebang headers in Javascript +- Support strings in Rust meta +- Recognize `struct` as a class-level definition in Rust +- Recognize b-prefixed chars and strings in Rust +- Better numbers handling in Verilog + +[Brendan Rocks]: http://brendanrocks.com +[Raphaël Assénat]: https://github.com/raphnet +[Matt Evans]: https://github.com/matthewevans +[Martin Braun]: https://github.com/mbr0wn +[Stefania Mellai]: https://github.com/smellai + + +## Version 9.0.0 + +The new major version brings a reworked styling system. Highlight.js now defines +a limited set of highlightable classes giving a consistent result across all the +styles and languages. You can read a more detailed explanation and background in +the [tracking issue][#348] that started this long process back in May. + +This change is backwards incompatible for those who uses highlight.js with a +custom stylesheet. The [new style guide][sg] explains how to write styles +in this new world. + +Bundled themes have also suffered a significant amount of improvements and may +look different in places, but all the things now consistent and make more sense. +Among others, the Default style has got a refresh and will probably be tweaked +some more in next releases. Please do give your feedback in our +[issue tracker][issues]. + +New languages in this release: + +- *Caché Object Script* by [Nikita Savchenko][] +- *YAML* by [Stefan Wienert][] +- *MIPS Assembler* by [Nebuleon Fumika][] +- *HSP* by [prince][] + +Improvements to existing languages and styles: + +- ECMAScript 6 modules import now do not require closing semicolon. +- ECMAScript 6 classes constructors now highlighted. +- Template string support for Typescript, as for ECMAScript 6. +- Scala case classes params highlight fixed. +- Built-in names introduced in Julia v0.4 added by [Kenta Sato][]. +- Refreshed Default style. + +Other notable changes: + +- [Web workers support][webworkers] added bu [Jan Kühle][]. +- We now have tests for compressed browser builds as well. +- The building tool chain has been switched to node.js 4.x. and is now + shamelessly uses ES6 features all over the place, courtesy of [Jeremy Hull][]. +- License added to non-compressed browser build. + +[Jan Kühle]: https://github.com/frigus02 +[Stefan Wienert]: https://github.com/zealot128 +[Kenta Sato]: https://github.com/bicycle1885 +[Nikita Savchenko]: https://github.com/ZitRos +[webworkers]: https://github.com/isagalaev/highlight.js#web-workers +[Jeremy Hull]: https://github.com/sourrust +[#348]: https://github.com/isagalaev/highlight.js/issues/348 +[sg]: http://highlightjs.readthedocs.org/en/latest/style-guide.html +[issues]: https://github.com/isagalaev/highlight.js/issues +[Nebuleon Fumika]: https://github.com/Nebuleon +[prince]: https://github.com/prince-0203 + + +## Version 8.9.1 + +Some last-minute changes reverted due to strange bug with minified browser build: + +- Scala case classes params highlight fixed +- ECMAScript 6 modules import now do not require closing semicolon +- ECMAScript 6 classes constructors now highlighted +- Template string support for Typescript, as for ECMAScript 6 +- License added to not minified browser build + + +## Version 8.9.0 + +New languages: + +- *crmsh* by [Kristoffer Gronlund][] +- *SQF* by [Soren Enevoldsen][] + +[Kristoffer Gronlund]: https://github.com/krig +[Soren Enevoldsen]: https://github.com/senevoldsen90 + +Notable fixes and improvements to existing languages: + +- Added `abstract` and `namespace` keywords to TypeScript by [Daniel Rosenwasser][] +- Added `label` support to Dockerfile by [Ladislav Prskavec][] +- Crystal highlighting improved by [Tsuyusato Kitsune][] +- Missing Swift keywords added by [Nate Cook][] +- Improve detection of C block comments +- ~~Scala case classes params highlight fixed~~ +- ~~ECMAScript 6 modules import now do not require closing semicolon~~ +- ~~ECMAScript 6 classes constructors now highlighted~~ +- ~~Template string support for Typescript, as for ECMAScript 6~~ + +Other notable changes: + +- ~~License added to not minified browser build~~ + +[Kristoffer Gronlund]: https://github.com/krig +[Søren Enevoldsen]: https://github.com/senevoldsen90 +[Daniel Rosenwasser]: https://github.com/DanielRosenwasser +[Ladislav Prskavec]: https://github.com/abtris +[Tsuyusato Kitsune]: https://github.com/MakeNowJust +[Nate Cook]: https://github.com/natecook1000 + + +## Version 8.8.0 + +New languages: + +- *Golo* by [Philippe Charrière][] +- *GAMS* by [Stefan Bechert][] +- *IRPF90* by [Anthony Scemama][] +- *Access logs* by [Oleg Efimov][] +- *Crystal* by [Tsuyusato Kitsune][] + +Notable fixes and improvements to existing languages: + +- JavaScript highlighting no longer fails with ES6 default parameters +- Added keywords `async` and `await` to Python +- PHP heredoc support improved +- Allow preprocessor directives within C++ functions + +Other notable changes: + +- Change versions to X.Y.Z SemVer-compatible format +- Added ability to build all targets at once + +[Philippe Charrière]: https://github.com/k33g +[Stefan Bechert]: https://github.com/b-pos465 +[Anthony Scemama]: https://github.com/scemama +[Oleg Efimov]: https://github.com/Sannis +[Tsuyusato Kitsune]: https://github.com/MakeNowJust + + +## Version 8.7 + +New languages: + +- *Zephir* by [Oleg Efimov][] +- *Elm* by [Janis Voigtländer][] +- *XQuery* by [Dirk Kirsten][] +- *Mojolicious* by [Dotan Dimet][] +- *AutoIt* by Manh Tuan from [J2TeaM][] +- *Toml* (ini extension) by [Guillaume Gomez][] + +New styles: + +- *Hopscotch* by [Jan T. Sott][] +- *Grayscale* by [MY Sun][] + +Notable fixes and improvements to existing languages: + +- Fix encoding of images when copied over in certain builds +- Fix incorrect highlighting of the word "bug" in comments +- Treat decorators different from matrix multiplication in Python +- Fix traits inheritance highlighting in Rust +- Fix incorrect document +- Oracle keywords added to SQL language definition by [Vadimtro][] +- Postgres keywords added to SQL language definition by [Benjamin Auder][] +- Fix registers in x86asm being highlighted as a hex number +- Fix highlighting for numbers with a leading decimal point +- Correctly highlight numbers and strings inside of C/C++ macros +- C/C++ functions now support pointer, reference, and move returns + +[Oleg Efimov]: https://github.com/Sannis +[Guillaume Gomez]: https://github.com/GuillaumeGomez +[Janis Voigtländer]: https://github.com/jvoigtlaender +[Jan T. Sott]: https://github.com/idleberg +[Dirk Kirsten]: https://github.com/dirkk +[MY Sun]: https://github.com/simonmysun +[Vadimtro]: https://github.com/Vadimtro +[Benjamin Auder]: https://github.com/ghost +[Dotan Dimet]: https://github.com/dotandimet +[J2TeaM]: https://github.com/J2TeaM + + +## Version 8.6 + +New languages: + +- *C/AL* by [Kenneth Fuglsang][] +- *DNS zone file* by [Tim Schumacher][] +- *Ceylon* by [Lucas Werkmeister][] +- *OpenSCAD* by [Dan Panzarella][] +- *Inform7* by [Bruno Dias][] +- *armasm* by [Dan Panzarella][] +- *TP* by [Jay Strybis][] + +New styles: + +- *Atelier Cave*, *Atelier Estuary*, + *Atelier Plateau* and *Atelier Savanna* by [Bram de Haan][] +- *Github Gist* by [Louis Barranqueiro][] + +Notable fixes and improvements to existing languages: + +- Multi-line raw strings from C++11 are now supported +- Fix class names with dashes in HAML +- The `async` keyword from ES6/7 is now supported +- TypeScript functions handle type and parameter complexity better +- We unified phpdoc/javadoc/yardoc etc modes across all languages +- CSS .class selectors relevance was dropped to prevent wrong language detection +- Images is now included to CDN build +- Release process is now automated + +[Bram de Haan]: https://github.com/atelierbram +[Kenneth Fuglsang]: https://github.com/kfuglsang +[Louis Barranqueiro]: https://github.com/LouisBarranqueiro +[Tim Schumacher]: https://github.com/enko +[Lucas Werkmeister]: https://github.com/lucaswerkmeister +[Dan Panzarella]: https://github.com/pzl +[Bruno Dias]: https://github.com/sequitur +[Jay Strybis]: https://github.com/unreal + + +## Version 8.5 + +New languages: + +- *pf.conf* by [Peter Piwowarski][] +- *Julia* by [Kenta Sato][] +- *Prolog* by [Raivo Laanemets][] +- *Docker* by [Alexis Hénaut][] +- *Fortran* by [Anthony Scemama][] and [Thomas Applencourt][] +- *Kotlin* by [Sergey Mashkov][] + +New styles: + +- *Agate* by [Taufik Nurrohman][] +- *Darkula* by [Jet Brains][] +- *Atelier Sulphurpool* by [Bram de Haan][] +- *Android Studio* by [Pedro Oliveira][] + +Notable fixes and improvements to existing languages: + +- ES6 features in JavaScript are better supported now by [Gu Yiling][]. +- Swift now recognizes body-less method definitions. +- Single expression functions `def foo, do: ... ` now work in Elixir. +- More uniform detection of built-in classes in Objective C. +- Fixes for number literals and processor directives in Rust. +- HTML ` + ``` + +- `tabReplace` and `useBR` that were used in different places are also unified + into the global options object and are to be set using `configure(options)`. + This function is documented in our [API docs][]. Also note that these + parameters are gone from `highlightBlock` and `fixMarkup` which are now also + rely on `configure`. + +- We removed public-facing (though undocumented) object `hljs.LANGUAGES` which + was used to register languages with the library in favor of two new methods: + `registerLanguage` and `getLanguage`. Both are documented in our [API docs][]. + +- Result returned from `highlight` and `highlightAuto` no longer contains two + separate attributes contributing to relevance score, `relevance` and + `keyword_count`. They are now unified in `relevance`. + +Another technically compatible change that nonetheless might need attention: + +- The structure of the NPM package was refactored, so if you had installed it + locally, you'll have to update your paths. The usual `require('highlight.js')` + works as before. This is contributed by [Dmitry Smolin][]. + +New features: + +- Languages now can be recognized by multiple names like "js" for JavaScript or + "html" for, well, HTML (which earlier insisted on calling it "xml"). These + aliases can be specified in the class attribute of the code container in your + HTML as well as in various API calls. For now there are only a few very common + aliases but we'll expand it in the future. All of them are listed in the + [class reference][cr]. + +- Language detection can now be restricted to a subset of languages relevant in + a given context — a web page or even a single highlighting call. This is + especially useful for node.js build that includes all the known languages. + Another example is a StackOverflow-style site where users specify languages + as tags rather than in the markdown-formatted code snippets. This is + documented in the [API reference][] (see methods `highlightAuto` and + `configure`). + +- Language definition syntax streamlined with [variants][] and + [beginKeywords][]. + +New languages and styles: + +- *Oxygene* by [Carlo Kok][] +- *Mathematica* by [Daniel Kvasnička][] +- *Autohotkey* by [Seongwon Lee][] +- *Atelier* family of styles in 10 variants by [Bram de Haan][] +- *Paraíso* styles by [Jan T. Sott][] + +Miscellaneous improvements: + +- Highlighting `=>` prompts in Clojure. +- [Jeremy Hull][] fixed a lot of styles for consistency. +- Finally, highlighting PHP and HTML [mixed in peculiar ways][php-html]. +- Objective C and C# now properly highlight titles in method definition. +- Big overhaul of relevance counting for a number of languages. Please do report + bugs about mis-detection of non-trivial code snippets! + +[API reference]: http://highlightjs.readthedocs.org/en/latest/api.html + +[cr]: http://highlightjs.readthedocs.org/en/latest/css-classes-reference.html +[api docs]: http://highlightjs.readthedocs.org/en/latest/api.html +[variants]: https://groups.google.com/d/topic/highlightjs/VoGC9-1p5vk/discussion +[beginKeywords]: https://github.com/isagalaev/highlight.js/commit/6c7fdea002eb3949577a85b3f7930137c7c3038d +[php-html]: https://twitter.com/highlightjs/status/408890903017689088 + +[Carlo Kok]: https://github.com/carlokok +[Bram de Haan]: https://github.com/atelierbram +[Daniel Kvasnička]: https://github.com/dkvasnicka +[Dmitry Smolin]: https://github.com/dimsmol +[Jeremy Hull]: https://github.com/sourrust +[Seongwon Lee]: https://github.com/dlimpid +[Jan T. Sott]: https://github.com/idleberg + + +## Version 7.5 + +A catch-up release dealing with some of the accumulated contributions. This one +is probably will be the last before the 8.0 which will be slightly backwards +incompatible regarding some advanced use-cases. + +One outstanding change in this version is the addition of 6 languages to the +[hosted script][d]: Markdown, ObjectiveC, CoffeeScript, Apache, Nginx and +Makefile. It now weighs about 6K more but we're going to keep it under 30K. + +New languages: + +- OCaml by [Mehdi Dogguy][mehdid] and [Nicolas Braud-Santoni][nbraud] +- [LiveCode Server][lcs] by [Ralf Bitter][revig] +- Scilab by [Sylvestre Ledru][sylvestre] +- basic support for Makefile by [Ivan Sagalaev][isagalaev] + +Improvements: + +- Ruby's got support for characters like `?A`, `?1`, `?\012` etc. and `%r{..}` + regexps. +- Clojure now allows a function call in the beginning of s-expressions + `(($filter "myCount") (arr 1 2 3 4 5))`. +- Haskell's got new keywords and now recognizes more things like pragmas, + preprocessors, modules, containers, FFIs etc. Thanks to [Zena Treep][treep] + for the implementation and to [Jeremy Hull][sourrust] for guiding it. +- Miscellaneous fixes in PHP, Brainfuck, SCSS, Asciidoc, CMake, Python and F#. + +[mehdid]: https://github.com/mehdid +[nbraud]: https://github.com/nbraud +[revig]: https://github.com/revig +[lcs]: http://livecode.com/developers/guides/server/ +[sylvestre]: https://github.com/sylvestre +[isagalaev]: https://github.com/isagalaev +[treep]: https://github.com/treep +[sourrust]: https://github.com/sourrust +[d]: http://highlightjs.org/download/ + + +## New core developers + +The latest long period of almost complete inactivity in the project coincided +with growing interest to it led to a decision that now seems completely obvious: +we need more core developers. + +So without further ado let me welcome to the core team two long-time +contributors: [Jeremy Hull][] and [Oleg +Efimov][]. + +Hope now we'll be able to work through stuff faster! + +P.S. The historical commit is [here][1] for the record. + +[Jeremy Hull]: https://github.com/sourrust +[Oleg Efimov]: https://github.com/sannis +[1]: https://github.com/isagalaev/highlight.js/commit/f3056941bda56d2b72276b97bc0dd5f230f2473f + + +## Version 7.4 + +This long overdue version is a snapshot of the current source tree with all the +changes that happened during the past year. Sorry for taking so long! + +Along with the changes in code highlight.js has finally got its new home at +, moving from its cradle on Software Maniacs which it +outgrew a long time ago. Be sure to report any bugs about the site to +. + +On to what's new… + +New languages: + +- Handlebars templates by [Robin Ward][] +- Oracle Rules Language by [Jason Jacobson][] +- F# by [Joans Follesø][] +- AsciiDoc and Haml by [Dan Allen][] +- Lasso by [Eric Knibbe][] +- SCSS by [Kurt Emch][] +- VB.NET by [Poren Chiang][] +- Mizar by [Kelley van Evert][] + +[Robin Ward]: https://github.com/eviltrout +[Jason Jacobson]: https://github.com/jayce7 +[Joans Follesø]: https://github.com/follesoe +[Dan Allen]: https://github.com/mojavelinux +[Eric Knibbe]: https://github.com/EricFromCanada +[Kurt Emch]: https://github.com/kemch +[Poren Chiang]: https://github.com/rschiang +[Kelley van Evert]: https://github.com/kelleyvanevert + +New style themes: + +- Monokai Sublime by [noformnocontent][] +- Railscasts by [Damien White][] +- Obsidian by [Alexander Marenin][] +- Docco by [Simon Madine][] +- Mono Blue by [Ivan Sagalaev][] (uses a single color hue for everything) +- Foundation by [Dan Allen][] + +[noformnocontent]: http://nn.mit-license.org/ +[Damien White]: https://github.com/visoft +[Alexander Marenin]: https://github.com/ioncreature +[Simon Madine]: https://github.com/thingsinjars +[Ivan Sagalaev]: https://github.com/isagalaev + +Other notable changes: + +- Corrected many corner cases in CSS. +- Dropped Python 2 version of the build tool. +- Implemented building for the AMD format. +- Updated Rust keywords (thanks to [Dmitry Medvinsky][]). +- Literal regexes can now be used in language definitions. +- CoffeeScript highlighting is now significantly more robust and rich due to + input from [Cédric Néhémie][]. + +[Dmitry Medvinsky]: https://github.com/dmedvinsky +[Cédric Néhémie]: https://github.com/abe33 + + +## Version 7.3 + +- Since this version highlight.js no longer works in IE version 8 and older. + It's made it possible to reduce the library size and dramatically improve code + readability and made it easier to maintain. Time to go forward! + +- New languages: AppleScript (by [Nathan Grigg][ng] and [Dr. Drang][dd]) and + Brainfuck (by [Evgeny Stepanischev][bolk]). + +- Improvements to existing languages: + + - interpreter prompt in Python (`>>>` and `...`) + - @-properties and classes in CoffeeScript + - E4X in JavaScript (by [Oleg Efimov][oe]) + - new keywords in Perl (by [Kirk Kimmel][kk]) + - big Ruby syntax update (by [Vasily Polovnyov][vast]) + - small fixes in Bash + +- Also Oleg Efimov did a great job of moving all the docs for language and style + developers and contributors from the old wiki under the source code in the + "docs" directory. Now these docs are nicely presented at + . + +[ng]: https://github.com/nathan11g +[dd]: https://github.com/drdrang +[bolk]: https://github.com/bolknote +[oe]: https://github.com/Sannis +[kk]: https://github.com/kimmel +[vast]: https://github.com/vast + + +## Version 7.2 + +A regular bug-fix release without any significant new features. Enjoy! + + +## Version 7.1 + +A Summer crop: + +- [Marc Fornos][mf] made the definition for Clojure along with the matching + style Rainbow (which, of course, works for other languages too). +- CoffeeScript support continues to improve getting support for regular + expressions. +- Yoshihide Jimbo ported to highlight.js [five Tomorrow styles][tm] from the + [project by Chris Kempson][tm0]. +- Thanks to [Casey Duncun][cd] the library can now be built in the popular + [AMD format][amd]. +- And last but not least, we've got a fair number of correctness and consistency + fixes, including a pretty significant refactoring of Ruby. + +[mf]: https://github.com/mfornos +[tm]: http://jmblog.github.com/color-themes-for-highlightjs/ +[tm0]: https://github.com/ChrisKempson/Tomorrow-Theme +[cd]: https://github.com/caseman +[amd]: http://requirejs.org/docs/whyamd.html + + +## Version 7.0 + +The reason for the new major version update is a global change of keyword syntax +which resulted in the library getting smaller once again. For example, the +hosted build is 2K less than at the previous version while supporting two new +languages. + +Notable changes: + +- The library now works not only in a browser but also with [node.js][]. It is + installable with `npm install highlight.js`. [API][] docs are available on our + wiki. + +- The new unique feature (apparently) among syntax highlighters is highlighting + *HTTP* headers and an arbitrary language in the request body. The most useful + languages here are *XML* and *JSON* both of which highlight.js does support. + Here's [the detailed post][p] about the feature. + +- Two new style themes: a dark "south" *[Pojoaque][]* by Jason Tate and an + emulation of*XCode* IDE by [Angel Olloqui][ao]. + +- Three new languages: *D* by [Aleksandar Ružičić][ar], *R* by [Joe Cheng][jc] + and *GLSL* by [Sergey Tikhomirov][st]. + +- *Nginx* syntax has become a million times smaller and more universal thanks to + remaking it in a more generic manner that doesn't require listing all the + directives in the known universe. + +- Function titles are now highlighted in *PHP*. + +- *Haskell* and *VHDL* were significantly reworked to be more rich and correct + by their respective maintainers [Jeremy Hull][sr] and [Igor Kalnitsky][ik]. + +And last but not least, many bugs have been fixed around correctness and +language detection. + +Overall highlight.js currently supports 51 languages and 20 style themes. + +[node.js]: http://nodejs.org/ +[api]: http://softwaremaniacs.org/wiki/doku.php/highlight.js:api +[p]: http://softwaremaniacs.org/blog/2012/05/10/http-and-json-in-highlight-js/en/ +[pojoaque]: http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html +[ao]: https://github.com/angelolloqui +[ar]: https://github.com/raleksandar +[jc]: https://github.com/jcheng5 +[st]: https://github.com/tikhomirov +[sr]: https://github.com/sourrust +[ik]: https://github.com/ikalnitsky + + +## Version 6.2 + +A lot of things happened in highlight.js since the last version! We've got nine +new contributors, the discussion group came alive, and the main branch on GitHub +now counts more than 350 followers. Here are most significant results coming +from all this activity: + +- 5 (five!) new languages: Rust, ActionScript, CoffeeScript, MatLab and + experimental support for markdown. Thanks go to [Andrey Vlasovskikh][av], + [Alexander Myadzel][am], [Dmytrii Nagirniak][dn], [Oleg Efimov][oe], [Denis + Bardadym][db] and [John Crepezzi][jc]. + +- 2 new style themes: Monokai by [Luigi Maselli][lm] and stylistic imitation of + another well-known highlighter Google Code Prettify by [Aahan Krish][ak]. + +- A vast number of [correctness fixes and code refactorings][log], mostly made + by [Oleg Efimov][oe] and [Evgeny Stepanischev][es]. + +[av]: https://github.com/vlasovskikh +[am]: https://github.com/myadzel +[dn]: https://github.com/dnagir +[oe]: https://github.com/Sannis +[db]: https://github.com/btd +[jc]: https://github.com/seejohnrun +[lm]: http://grigio.org/ +[ak]: https://github.com/geekpanth3r +[es]: https://github.com/bolknote +[log]: https://github.com/isagalaev/highlight.js/commits/ + + +## Version 6.1 — Solarized + +[Jeremy Hull][jh] has implemented my dream feature — a port of [Solarized][] +style theme famous for being based on the intricate color theory to achieve +correct contrast and color perception. It is now available for highlight.js in +both variants — light and dark. + +This version also adds a new original style Arta. Its author pumbur maintains a +[heavily modified fork of highlight.js][pb] on GitHub. + +[jh]: https://github.com/sourrust +[solarized]: http://ethanschoonover.com/solarized +[pb]: https://github.com/pumbur/highlight.js + + +## Version 6.0 + +New major version of the highlighter has been built on a significantly +refactored syntax. Due to this it's even smaller than the previous one while +supporting more languages! + +New languages are: + +- Haskell by [Jeremy Hull][sourrust] +- Erlang in two varieties — module and REPL — made collectively by [Nikolay + Zakharov][desh], [Dmitry Kovega][arhibot] and [Sergey Ignatov][ignatov] +- Objective C by [Valerii Hiora][vhbit] +- Vala by [Antono Vasiljev][antono] +- Go by [Stephan Kountso][steplg] + +[sourrust]: https://github.com/sourrust +[desh]: http://desh.su/ +[arhibot]: https://github.com/arhibot +[ignatov]: https://github.com/ignatov +[vhbit]: https://github.com/vhbit +[antono]: https://github.com/antono +[steplg]: https://github.com/steplg + +Also this version is marginally faster and fixes a number of small long-standing +bugs. + +Developer overview of the new language syntax is available in a [blog post about +recent beta release][beta]. + +[beta]: http://softwaremaniacs.org/blog/2011/04/25/highlight-js-60-beta/en/ + +P.S. New version is not yet available on a Yandex CDN, so for now you have to +download [your own copy][d]. + +[d]: /soft/highlight/en/download/ + + +## Version 5.14 + +Fixed bugs in HTML/XML detection and relevance introduced in previous +refactoring. + +Also test.html now shows the second best result of language detection by +relevance. + + +## Version 5.13 + +Past weekend began with a couple of simple additions for existing languages but +ended up in a big code refactoring bringing along nice improvements for language +developers. + +### For users + +- Description of C++ has got new keywords from the upcoming [C++ 0x][] standard. +- Description of HTML has got new tags from [HTML 5][]. +- CSS-styles have been unified to use consistent padding and also have lost + pop-outs with names of detected languages. +- [Igor Kalnitsky][ik] has sent two new language descriptions: CMake & VHDL. + +This makes total number of languages supported by highlight.js to reach 35. + +Bug fixes: + +- Custom classes on `
    ` tags are not being overridden anymore
    +- More correct highlighting of code blocks inside non-`
    ` containers:
    +  highlighter now doesn't insist on replacing them with its own container and
    +  just replaces the contents.
    +- Small fixes in browser compatibility and heuristics.
    +
    +[c++ 0x]: http://ru.wikipedia.org/wiki/C%2B%2B0x
    +[html 5]: http://en.wikipedia.org/wiki/HTML5
    +[ik]: http://kalnitsky.org.ua/
    +
    +### For developers
    +
    +The most significant change is the ability to include language submodes right
    +under `contains` instead of defining explicit named submodes in the main array:
    +
    +    contains: [
    +      'string',
    +      'number',
    +      {begin: '\\n', end: hljs.IMMEDIATE_RE}
    +    ]
    +
    +This is useful for auxiliary modes needed only in one place to define parsing.
    +Note that such modes often don't have `className` and hence won't generate a
    +separate `` in the resulting markup. This is similar in effect to
    +`noMarkup: true`. All existing languages have been refactored accordingly.
    +
    +Test file test.html has at last become a real test. Now it not only puts the
    +detected language name under the code snippet but also tests if it matches the
    +expected one. Test summary is displayed right above all language snippets.
    +
    +
    +## CDN
    +
    +Fine people at [Yandex][] agreed to host highlight.js on their big fast servers.
    +[Link up][l]!
    +
    +[yandex]: http://yandex.com/
    +[l]: http://softwaremaniacs.org/soft/highlight/en/download/
    +
    +
    +## Version 5.10 — "Paris".
    +
    +Though I'm on a vacation in Paris, I decided to release a new version with a
    +couple of small fixes:
    +
    +- Tomas Vitvar discovered that TAB replacement doesn't always work when used
    +  with custom markup in code
    +- SQL parsing is even more rigid now and doesn't step over SmallTalk in tests
    +
    +
    +## Version 5.9
    +
    +A long-awaited version is finally released.
    +
    +New languages:
    +
    +- Andrew Fedorov made a definition for Lua
    +- a long-time highlight.js contributor [Peter Leonov][pl] made a definition for
    +  Nginx config
    +- [Vladimir Moskva][vm] made a definition for TeX
    +
    +[pl]: http://kung-fu-tzu.ru/
    +[vm]: http://fulc.ru/
    +
    +Fixes for existing languages:
    +
    +- [Loren Segal][ls] reworked the Ruby definition and added highlighting for
    +  [YARD][] inline documentation
    +- the definition of SQL has become more solid and now it shouldn't be overly
    +  greedy when it comes to language detection
    +
    +[ls]: http://gnuu.org/
    +[yard]: http://yardoc.org/
    +
    +The highlighter has become more usable as a library allowing to do highlighting
    +from initialization code of JS frameworks and in ajax methods (see.
    +readme.eng.txt).
    +
    +Also this version drops support for the [WordPress][wp] plugin. Everyone is
    +welcome to [pick up its maintenance][p] if needed.
    +
    +[wp]: http://wordpress.org/
    +[p]: http://bazaar.launchpad.net/~isagalaev/+junk/highlight/annotate/342/src/wp_highlight.js.php
    +
    +
    +## Version 5.8
    +
    +- Jan Berkel has contributed a definition for Scala. +1 to hotness!
    +- All CSS-styles are rewritten to work only inside `
    ` tags to avoid
    +  conflicts with host site styles.
    +
    +
    +## Version 5.7.
    +
    +Fixed escaping of quotes in VBScript strings.
    +
    +
    +## Version 5.5
    +
    +This version brings a small change: now .ini-files allow digits, underscores and
    +square brackets in key names.
    +
    +
    +## Version 5.4
    +
    +Fixed small but upsetting bug in the packer which caused incorrect highlighting
    +of explicitly specified languages. Thanks to Andrew Fedorov for precise
    +diagnostics!
    +
    +
    +## Version 5.3
    +
    +The version to fulfil old promises.
    +
    +The most significant change is that highlight.js now preserves custom user
    +markup in code along with its own highlighting markup. This means that now it's
    +possible to use, say, links in code. Thanks to [Vladimir Dolzhenko][vd] for the
    +[initial proposal][1] and for making a proof-of-concept patch.
    +
    +Also in this version:
    +
    +- [Vasily Polovnyov][vp] has sent a GitHub-like style and has implemented
    +  support for CSS @-rules and Ruby symbols.
    +- Yura Zaripov has sent two styles: Brown Paper and School Book.
    +- Oleg Volchkov has sent a definition for [Parser 3][p3].
    +
    +[1]: http://softwaremaniacs.org/forum/highlightjs/6612/
    +[p3]: http://www.parser.ru/
    +[vp]: http://vasily.polovnyov.ru/
    +[vd]: http://dolzhenko.blogspot.com/
    +
    +
    +## Version 5.2
    +
    +- at last it's possible to replace indentation TABs with something sensible
    +  (e.g. 2 or 4 spaces)
    +- new keywords and built-ins for 1C by Sergey Baranov
    +- a couple of small fixes to Apache highlighting
    +
    +
    +## Version 5.1
    +
    +This is one of those nice version consisting entirely of new and shiny
    +contributions!
    +
    +- [Vladimir Ermakov][vooon] created highlighting for AVR Assembler
    +- [Ruslan Keba][rukeba] created highlighting for Apache config file. Also his
    +  original visual style for it is now available for all highlight.js languages
    +  under the name "Magula".
    +- [Shuen-Huei Guan][drake] (aka Drake) sent new keywords for RenderMan
    +  languages. Also thanks go to [Konstantin Evdokimenko][ke] for his advice on
    +  the matter.
    +
    +[vooon]: http://vehq.ru/about/
    +[rukeba]: http://rukeba.com/
    +[drake]: http://drakeguan.org/
    +[ke]: http://k-evdokimenko.moikrug.ru/
    +
    +
    +## Version 5.0
    +
    +The main change in the new major version of highlight.js is a mechanism for
    +packing several languages along with the library itself into a single compressed
    +file. Now sites using several languages will load considerably faster because
    +the library won't dynamically include additional files while loading.
    +
    +Also this version fixes a long-standing bug with Javascript highlighting that
    +couldn't distinguish between regular expressions and division operations.
    +
    +And as usually there were a couple of minor correctness fixes.
    +
    +Great thanks to all contributors! Keep using highlight.js.
    +
    +
    +## Version 4.3
    +
    +This version comes with two contributions from [Jason Diamond][jd]:
    +
    +- language definition for C# (yes! it was a long-missed thing!)
    +- Visual Studio-like highlighting style
    +
    +Plus there are a couple of minor bug fixes for parsing HTML and XML attributes.
    +
    +[jd]: http://jason.diamond.name/weblog/
    +
    +
    +## Version 4.2
    +
    +The biggest news is highlighting for Lisp, courtesy of Vasily Polovnyov. It's
    +somewhat experimental meaning that for highlighting "keywords" it doesn't use
    +any pre-defined set of a Lisp dialect. Instead it tries to highlight first word
    +in parentheses wherever it makes sense. I'd like to ask people programming in
    +Lisp to confirm if it's a good idea and send feedback to [the forum][f].
    +
    +Other changes:
    +
    +- Smalltalk was excluded from DEFAULT_LANGUAGES to save traffic
    +- [Vladimir Epifanov][voldmar] has implemented javascript style switcher for
    +  test.html
    +- comments now allowed inside Ruby function definition
    +- [MEL][] language from [Shuen-Huei Guan][drake]
    +- whitespace now allowed between `
    ` and ``
    +- better auto-detection of C++ and PHP
    +- HTML allows embedded VBScript (`<% .. %>`)
    +
    +[f]: http://softwaremaniacs.org/forum/highlightjs/
    +[voldmar]: http://voldmar.ya.ru/
    +[mel]: http://en.wikipedia.org/wiki/Maya_Embedded_Language
    +[drake]: http://drakeguan.org/
    +
    +
    +## Version 4.1
    +
    +Languages:
    +
    +- Bash from Vah
    +- DOS bat-files from Alexander Makarov (Sam)
    +- Diff files from Vasily Polovnyov
    +- Ini files from myself though initial idea was from Sam
    +
    +Styles:
    +
    +- Zenburn from Vladimir Epifanov, this is an imitation of a
    +  [well-known theme for Vim][zenburn].
    +- Ascetic from myself, as a realization of ideals of non-flashy highlighting:
    +  just one color in only three gradations :-)
    +
    +In other news. [One small bug][bug] was fixed, built-in keywords were added for
    +Python and C++ which improved auto-detection for the latter (it was shame that
    +[my wife's blog][alenacpp] had issues with it from time to time). And lastly
    +thanks go to Sam for getting rid of my stylistic comments in code that were
    +getting in the way of [JSMin][].
    +
    +[zenburn]: http://en.wikipedia.org/wiki/Zenburn
    +[alenacpp]: http://alenacpp.blogspot.com/
    +[bug]: http://softwaremaniacs.org/forum/viewtopic.php?id=1823
    +[jsmin]: http://code.google.com/p/jsmin-php/
    +
    +
    +## Version 4.0
    +
    +New major version is a result of vast refactoring and of many contributions.
    +
    +Visible new features:
    +
    +- Highlighting of embedded languages. Currently is implemented highlighting of
    +  Javascript and CSS inside HTML.
    +- Bundled 5 ready-made style themes!
    +
    +Invisible new features:
    +
    +- Highlight.js no longer pollutes global namespace. Only one object and one
    +  function for backward compatibility.
    +- Performance is further increased by about 15%.
    +
    +Changing of a major version number caused by a new format of language definition
    +files. If you use some third-party language files they should be updated.
    +
    +
    +## Version 3.5
    +
    +A very nice version in my opinion fixing a number of small bugs and slightly
    +increased speed in a couple of corner cases. Thanks to everybody who reports
    +bugs in he [forum][f] and by email!
    +
    +There is also a new language — XML. A custom XML formerly was detected as HTML
    +and didn't highlight custom tags. In this version I tried to make custom XML to
    +be detected and highlighted by its own rules. Which by the way include such
    +things as CDATA sections and processing instructions (``).
    +
    +[f]: http://softwaremaniacs.org/forum/viewforum.php?id=6
    +
    +
    +## Version 3.3
    +
    +[Vladimir Gubarkov][xonix] has provided an interesting and useful addition.
    +File export.html contains a little program that shows and allows to copy and
    +paste an HTML code generated by the highlighter for any code snippet. This can
    +be useful in situations when one can't use the script itself on a site.
    +
    +
    +[xonix]: http://xonixx.blogspot.com/
    +
    +
    +## Version 3.2 consists completely of contributions:
    +
    +- Vladimir Gubarkov has described SmallTalk
    +- Yuri Ivanov has described 1C
    +- Peter Leonov has packaged the highlighter as a Firefox extension
    +- Vladimir Ermakov has compiled a mod for phpBB
    +
    +Many thanks to you all!
    +
    +
    +## Version 3.1
    +
    +Three new languages are available: Django templates, SQL and Axapta. The latter
    +two are sent by [Dmitri Roudakov][1]. However I've almost entirely rewrote an
    +SQL definition but I'd never started it be it from the ground up :-)
    +
    +The engine itself has got a long awaited feature of grouping keywords
    +("keyword", "built-in function", "literal"). No more hacks!
    +
    +[1]: http://roudakov.ru/
    +
    +
    +## Version 3.0
    +
    +It is major mainly because now highlight.js has grown large and has become
    +modular. Now when you pass it a list of languages to highlight it will
    +dynamically load into a browser only those languages.
    +
    +Also:
    +
    +- Konstantin Evdokimenko of [RibKit][] project has created a highlighting for
    +  RenderMan Shading Language and RenderMan Interface Bytestream. Yay for more
    +  languages!
    +- Heuristics for C++ and HTML got better.
    +- I've implemented (at last) a correct handling of backslash escapes in C-like
    +  languages.
    +
    +There is also a small backwards incompatible change in the new version. The
    +function initHighlighting that was used to initialize highlighting instead of
    +initHighlightingOnLoad a long time ago no longer works. If you by chance still
    +use it — replace it with the new one.
    +
    +[RibKit]: http://ribkit.sourceforge.net/
    +
    +
    +## Version 2.9
    +
    +Highlight.js is a parser, not just a couple of regular expressions. That said
    +I'm glad to announce that in the new version 2.9 has support for:
    +
    +- in-string substitutions for Ruby -- `#{...}`
    +- strings from from numeric symbol codes (like #XX) for Delphi
    +
    +
    +## Version 2.8
    +
    +A maintenance release with more tuned heuristics. Fully backwards compatible.
    +
    +
    +## Version 2.7
    +
    +- Nikita Ledyaev presents highlighting for VBScript, yay!
    +- A couple of bugs with escaping in strings were fixed thanks to Mickle
    +- Ongoing tuning of heuristics
    +
    +Fixed bugs were rather unpleasant so I encourage everyone to upgrade!
    +
    +
    +## Version 2.4
    +
    +- Peter Leonov provides another improved highlighting for Perl
    +- Javascript gets a new kind of keywords — "literals". These are the words
    +  "true", "false" and "null"
    +
    +Also highlight.js homepage now lists sites that use the library. Feel free to
    +add your site by [dropping me a message][mail] until I find the time to build a
    +submit form.
    +
    +[mail]: mailto:Maniac@SoftwareManiacs.Org
    +
    +
    +## Version 2.3
    +
    +This version fixes IE breakage in previous version. My apologies to all who have
    +already downloaded that one!
    +
    +
    +## Version 2.2
    +
    +- added highlighting for Javascript
    +- at last fixed parsing of Delphi's escaped apostrophes in strings
    +- in Ruby fixed highlighting of keywords 'def' and 'class', same for 'sub' in
    +  Perl
    +
    +
    +## Version 2.0
    +
    +- Ruby support by [Anton Kovalyov][ak]
    +- speed increased by orders of magnitude due to new way of parsing
    +- this same way allows now correct highlighting of keywords in some tricky
    +  places (like keyword "End" at the end of Delphi classes)
    +
    +[ak]: http://anton.kovalyov.net/
    +
    +
    +## Version 1.0
    +
    +Version 1.0 of javascript syntax highlighter is released!
    +
    +It's the first version available with English description. Feel free to post
    +your comments and question to [highlight.js forum][forum]. And don't be afraid
    +if you find there some fancy Cyrillic letters -- it's for Russian users too :-)
    +
    +[forum]: http://softwaremaniacs.org/forum/viewforum.php?id=6
    diff --git a/doc/html-manual/highlight/LICENSE b/doc/html-manual/highlight/LICENSE
    new file mode 100644
    index 00000000000..422deb7350f
    --- /dev/null
    +++ b/doc/html-manual/highlight/LICENSE
    @@ -0,0 +1,24 @@
    +Copyright (c) 2006, Ivan Sagalaev
    +All rights reserved.
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above copyright
    +      notice, this list of conditions and the following disclaimer in the
    +      documentation and/or other materials provided with the distribution.
    +    * Neither the name of highlight.js nor the names of its contributors 
    +      may be used to endorse or promote products derived from this software 
    +      without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
    +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    diff --git a/doc/html-manual/highlight/README.md b/doc/html-manual/highlight/README.md
    new file mode 100644
    index 00000000000..3afbde3127c
    --- /dev/null
    +++ b/doc/html-manual/highlight/README.md
    @@ -0,0 +1,141 @@
    +# Highlight.js
    +
    +[![Build Status](https://travis-ci.org/isagalaev/highlight.js.svg?branch=master)](https://travis-ci.org/isagalaev/highlight.js)
    +
    +Highlight.js is a syntax highlighter written in JavaScript. It works in
    +the browser as well as on the server. It works with pretty much any
    +markup, doesn’t depend on any framework and has automatic language
    +detection.
    +
    +## Getting Started
    +
    +The bare minimum for using highlight.js on a web page is linking to the
    +library along with one of the styles and calling
    +[`initHighlightingOnLoad`][1]:
    +
    +```html
    +
    +
    +
    +```
    +
    +This will find and highlight code inside of `
    ` tags; it tries
    +to detect the language automatically. If automatic detection doesn’t
    +work for you, you can specify the language in the `class` attribute:
    +
    +```html
    +
    ...
    +``` + +The list of supported language classes is available in the [class +reference][2]. Classes can also be prefixed with either `language-` or +`lang-`. + +To disable highlighting altogether use the `nohighlight` class: + +```html +
    ...
    +``` + +## Custom Initialization + +When you need a bit more control over the initialization of +highlight.js, you can use the [`highlightBlock`][3] and [`configure`][4] +functions. This allows you to control *what* to highlight and *when*. + +Here’s an equivalent way to calling [`initHighlightingOnLoad`][1] using +jQuery: + +```javascript +$(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); +}); +``` + +You can use any tags instead of `
    ` to mark up your code. If
    +you don't use a container that preserve line breaks you will need to
    +configure highlight.js to use the `
    ` tag: + +```javascript +hljs.configure({useBR: true}); + +$('div.code').each(function(i, block) { + hljs.highlightBlock(block); +}); +``` + +For other options refer to the documentation for [`configure`][4]. + + +## Web Workers + +You can run highlighting inside a web worker to avoid freezing the browser +window while dealing with very big chunks of code. + +In your main script: + +```javascript +addEventListener('load', function() { + var code = document.querySelector('#code'); + var worker = new Worker('worker.js'); + worker.onmessage = function(event) { code.innerHTML = event.data; } + worker.postMessage(code.textContent); +}) +``` + +In worker.js: + +```javascript +onmessage = function(event) { + importScripts('/highlight.pack.js'); + var result = self.hljs.highlightAuto(event.data); + postMessage(result.value); +} +``` + + +## Getting the Library + +You can get highlight.js as a hosted, or custom-build, browser script or +as a server module. Right out of the box the browser script supports +both AMD and CommonJS, so if you wish you can use RequireJS or +Browserify without having to build from source. The server module also +works perfectly fine with Browserify, but there is the option to use a +build specific to browsers rather than something meant for a server. +Head over to the [download page][5] for all the options. + +**Note:** the library is not supposed to work straight from the source +on GitHub; it requires building. If none of the pre-packaged options +work for you refer to the [building documentation][6]. + +Also, if you are using something like almond, you need to use the +optimizer to give the module a name. The basic example would be: + +``` +r.js -o name=hljs paths.hljs=/path/to/highlight out=highlight.js +``` + +## License + +Highlight.js is released under the BSD License. See [LICENSE][7] file +for details. + +## Links + +The official site for the library is at . + +Further in-depth documentation for the API and other topics is at +. + +Authors and contributors are listed in the [AUTHORS.en.txt][8] file. + +[1]: http://highlightjs.readthedocs.org/en/latest/api.html#inithighlightingonload +[2]: http://highlightjs.readthedocs.org/en/latest/css-classes-reference.html +[3]: http://highlightjs.readthedocs.org/en/latest/api.html#highlightblock-block +[4]: http://highlightjs.readthedocs.org/en/latest/api.html#configure-options +[5]: https://highlightjs.org/download/ +[6]: http://highlightjs.readthedocs.org/en/latest/building-testing.html +[7]: https://github.com/isagalaev/highlight.js/blob/master/LICENSE +[8]: https://github.com/isagalaev/highlight.js/blob/master/AUTHORS.en.txt diff --git a/doc/html-manual/highlight/README.ru.md b/doc/html-manual/highlight/README.ru.md new file mode 100644 index 00000000000..c429d7dda4c --- /dev/null +++ b/doc/html-manual/highlight/README.ru.md @@ -0,0 +1,128 @@ +# Highlight.js + +Highlight.js — это инструмент для подсветки синтаксиса, написанный на JavaScript. Он работает +и в браузере, и на сервере. Он работает с практически любой HTML разметкой, не +зависит от каких-либо фреймворков и умеет автоматически определять язык. + + +## Начало работы + +Минимум, что нужно сделать для использования highlight.js на веб-странице — это +подключить библиотеку, CSS-стили и вызывать [`initHighlightingOnLoad`][1]: + +```html + + + +``` + +Библиотека найдёт и раскрасит код внутри тегов `
    `, попытавшись
    +автоматически определить язык. Когда автоопределение не срабатывает, можно явно
    +указать язык в атрибуте class:
    +
    +```html
    +
    ...
    +``` + +Список поддерживаемых классов языков доступен в [справочнике по классам][8]. +Класс также можно предварить префиксами `language-` или `lang-`. + +Чтобы отключить подсветку для какого-то блока, используйте класс `nohighlight`: + +```html +
    ...
    +``` + +## Инициализация вручную + +Чтобы иметь чуть больше контроля за инициализацией подсветки, вы можете +использовать функции [`highlightBlock`][2] и [`configure`][3]. Таким образом +можно управлять тем, *что* и *когда* подсвечивать. + +Вот пример инициализации, эквивалентной вызову [`initHighlightingOnLoad`][1], но +с использованием jQuery: + +```javascript +$(document).ready(function() { + $('pre code').each(function(i, block) { + hljs.highlightBlock(block); + }); +}); +``` + +Вы можете использовать любые теги разметки вместо `
    `. Если
    +используете контейнер, не сохраняющий переводы строк, вам нужно сказать
    +highlight.js использовать для них тег `
    `: + +```javascript +hljs.configure({useBR: true}); + +$('div.code').each(function(i, block) { + hljs.highlightBlock(block); +}); +``` + +Другие опции можно найти в документации функции [`configure`][3]. + + +## Web Workers + +Подсветку можно запустить внутри web worker'а, чтобы окно +браузера не подтормаживало при работе с большими кусками кода. + +В основном скрипте: + +```javascript +addEventListener('load', function() { + var code = document.querySelector('#code'); + var worker = new Worker('worker.js'); + worker.onmessage = function(event) { code.innerHTML = event.data; } + worker.postMessage(code.textContent); +}) +``` + +В worker.js: + +```javascript +onmessage = function(event) { + importScripts('/highlight.pack.js'); + var result = self.hljs.highlightAuto(event.data); + postMessage(result.value); +} +``` + + +## Установка библиотеки + +Highlight.js можно использовать в браузере прямо с CDN хостинга или скачать +индивидуальную сборку, а также установив модуль на сервере. На +[странице загрузки][4] подробно описаны все варианты. + +Обратите внимание, что библиотека не предназначена для использования в виде +исходного кода на GitHub, а требует отдельной сборки. Если вам не подходит ни +один из готовых вариантов, читайте [документацию по сборке][5]. + + +## Лицензия + +Highlight.js распространяется под лицензией BSD. Подробнее читайте файл +[LICENSE][10]. + + +## Ссылки + +Официальный сайт билиотеки расположен по адресу . + +Более подробная документация по API и другим темам расположена на +. + +Авторы и контрибьюторы перечислены в файле [AUTHORS.ru.txt][9] file. + +[1]: http://highlightjs.readthedocs.org/en/latest/api.html#inithighlightingonload +[2]: http://highlightjs.readthedocs.org/en/latest/api.html#highlightblock-block +[3]: http://highlightjs.readthedocs.org/en/latest/api.html#configure-options +[4]: https://highlightjs.org/download/ +[5]: http://highlightjs.readthedocs.org/en/latest/building-testing.html +[8]: http://highlightjs.readthedocs.org/en/latest/css-classes-reference.html +[9]: https://github.com/isagalaev/highlight.js/blob/master/AUTHORS.ru.txt +[10]: https://github.com/isagalaev/highlight.js/blob/master/LICENSE diff --git a/doc/html-manual/highlight/highlight.pack.js b/doc/html-manual/highlight/highlight.pack.js new file mode 100644 index 00000000000..39d95d36c8b --- /dev/null +++ b/doc/html-manual/highlight/highlight.pack.js @@ -0,0 +1,2 @@ +/*! highlight.js v9.4.0 | BSD3 License | git.io/hljslicense */ +!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(//gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/i.exec(i))return w(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset"}function u(e){f+=""}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,f="",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else"start"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t";return i+=e+'">',i+n+o}function h(){if(!k.k)return n(M);var e="",t=0;k.lR.lastIndex=0;for(var r=k.lR.exec(M);r;){e+=n(M.substr(t,r.index-t));var a=g(k,r);a?(B+=a[1],e+=p(a[0],n(r[0]))):e+=n(r[0]),t=k.lR.lastIndex,r=k.lR.exec(M)}return e+n(M.substr(t))}function d(){var e="string"==typeof k.sL;if(e&&!R[k.sL])return n(M);var t=e?f(k.sL,M,!0,y[k.sL]):l(M,k.sL.length?k.sL:void 0);return k.r>0&&(B+=t.r),e&&(y[k.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=void 0!==k.sL?d():h(),M=""}function v(e,n){L+=e.cN?p(e.cN,"",!0):"",k=Object.create(e,{parent:{value:k}})}function m(e,n){if(M+=e,void 0===n)return b(),0;var t=o(n,k);if(t)return t.skip?M+=n:(t.eB&&(M+=n),b(),t.rB||t.eB||(M=n)),v(t,n),t.rB?0:n.length;var r=u(k,n);if(r){var a=k;a.skip?M+=n:(a.rE||a.eE||(M+=n),b(),a.eE&&(M=n));do k.cN&&(L+=""),k.skip||(B+=k.r),k=k.parent;while(k!=r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,k))throw new Error('Illegal lexeme "'+n+'" for mode "'+(k.cN||"")+'"');return M+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var x,k=i||N,y={},L="";for(x=k;x!=N;x=x.parent)x.cN&&(L=p(x.cN,"",!0)+L);var M="",B=0;try{for(var C,j,I=0;;){if(k.t.lastIndex=I,C=k.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),x=k;x.parent;x=x.parent)x.cN&&(L+="");return{r:B,value:L,language:e,top:k}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(R);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"
    ")),e}function p(e,n,t){var r=n?x[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function h(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var h=document.createElementNS("http://www.w3.org/1999/xhtml","div");h.innerHTML=o.value,o.value=c(s,u(h),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=p(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,h)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=R[n]=t(e);r.aliases&&r.aliases.forEach(function(e){x[e]=n})}function N(){return Object.keys(R)}function w(e){return e=(e||"").toLowerCase(),R[e]||R[x[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},R={},x={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=h,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?"'}),{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{b:t.CNR}],r:0},i={cN:"meta",b:/#[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:"<",e:">",i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]}]),exports:{preprocessor:i,strings:r,k:c}}}); \ No newline at end of file diff --git a/doc/html-manual/highlight/styles/agate.css b/doc/html-manual/highlight/styles/agate.css new file mode 100644 index 00000000000..8d64547c587 --- /dev/null +++ b/doc/html-manual/highlight/styles/agate.css @@ -0,0 +1,108 @@ +/*! + * Agate by Taufik Nurrohman + * ---------------------------------------------------- + * + * #ade5fc + * #a2fca2 + * #c6b4f0 + * #d36363 + * #fcc28c + * #fc9b9b + * #ffa + * #fff + * #333 + * #62c8f3 + * #888 + * + */ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #333; + color: white; +} + +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-code, +.hljs-emphasis { + font-style: italic; +} + +.hljs-tag { + color: #62c8f3; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-selector-id, +.hljs-selector-class { + color: #ade5fc; +} + +.hljs-string, +.hljs-bullet { + color: #a2fca2; +} + +.hljs-type, +.hljs-title, +.hljs-section, +.hljs-attribute, +.hljs-quote, +.hljs-built_in, +.hljs-builtin-name { + color: #ffa; +} + +.hljs-number, +.hljs-symbol, +.hljs-bullet { + color: #d36363; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal { + color: #fcc28c; +} + +.hljs-comment, +.hljs-deletion, +.hljs-code { + color: #888; +} + +.hljs-regexp, +.hljs-link { + color: #c6b4f0; +} + +.hljs-meta { + color: #fc9b9b; +} + +.hljs-deletion { + background-color: #fc9b9b; + color: #333; +} + +.hljs-addition { + background-color: #a2fca2; + color: #333; +} + +.hljs a { + color: inherit; +} + +.hljs a:focus, +.hljs a:hover { + color: inherit; + text-decoration: underline; +} diff --git a/doc/html-manual/highlight/styles/androidstudio.css b/doc/html-manual/highlight/styles/androidstudio.css new file mode 100644 index 00000000000..bc8e473b593 --- /dev/null +++ b/doc/html-manual/highlight/styles/androidstudio.css @@ -0,0 +1,66 @@ +/* +Date: 24 Fev 2015 +Author: Pedro Oliveira +*/ + +.hljs { + color: #a9b7c6; + background: #282b2e; + display: block; + overflow-x: auto; + padding: 0.5em; +} + +.hljs-number, +.hljs-literal, +.hljs-symbol, +.hljs-bullet { + color: #6897BB; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-deletion { + color: #cc7832; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-link { + color: #629755; +} + +.hljs-comment, +.hljs-quote { + color: #808080; +} + +.hljs-meta { + color: #bbb529; +} + +.hljs-string, +.hljs-attribute, +.hljs-addition { + color: #6A8759; +} + +.hljs-section, +.hljs-title, +.hljs-type { + color: #ffc66d; +} + +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #e8bf6a; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/arduino-light.css b/doc/html-manual/highlight/styles/arduino-light.css new file mode 100644 index 00000000000..4b8b7fd3c93 --- /dev/null +++ b/doc/html-manual/highlight/styles/arduino-light.css @@ -0,0 +1,88 @@ +/* + +Arduino® Light Theme - Stefania Mellai + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #FFFFFF; +} + +.hljs, +.hljs-subst { + color: #434f54; +} + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-doctag, +.hljs-name { + color: #00979D; +} + +.hljs-built_in, +.hljs-literal, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #D35400; +} + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #00979D; +} + +.hljs-type, +.hljs-string, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #005C5F; +} + +.hljs-title, +.hljs-section { + color: #880000; + font-weight: bold; +} + +.hljs-comment { + color: rgba(149,165,166,.8); +} + +.hljs-meta-keyword { + color: #728E00; +} + +.hljs-meta { + color: #728E00; + color: #434f54; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-function { + color: #728E00; +} + +.hljs-number { + color: #8A7B52; +} diff --git a/doc/html-manual/highlight/styles/arta.css b/doc/html-manual/highlight/styles/arta.css new file mode 100644 index 00000000000..75ef3a9e595 --- /dev/null +++ b/doc/html-manual/highlight/styles/arta.css @@ -0,0 +1,73 @@ +/* +Date: 17.V.2011 +Author: pumbur +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #222; +} + +.hljs, +.hljs-subst { + color: #aaa; +} + +.hljs-section { + color: #fff; +} + +.hljs-comment, +.hljs-quote, +.hljs-meta { + color: #444; +} + +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-regexp { + color: #ffcc33; +} + +.hljs-number, +.hljs-addition { + color: #00cc66; +} + +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-template-variable, +.hljs-attribute, +.hljs-link { + color: #32aaee; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #6644aa; +} + +.hljs-title, +.hljs-variable, +.hljs-deletion, +.hljs-template-tag { + color: #bb1166; +} + +.hljs-section, +.hljs-doctag, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/ascetic.css b/doc/html-manual/highlight/styles/ascetic.css new file mode 100644 index 00000000000..48397e889dd --- /dev/null +++ b/doc/html-manual/highlight/styles/ascetic.css @@ -0,0 +1,45 @@ +/* + +Original style from softwaremaniacs.org (c) Ivan Sagalaev + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: white; + color: black; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-symbol, +.hljs-bullet, +.hljs-section, +.hljs-addition, +.hljs-attribute, +.hljs-link { + color: #888; +} + +.hljs-comment, +.hljs-quote, +.hljs-meta, +.hljs-deletion { + color: #ccc; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-section, +.hljs-name, +.hljs-type, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/atelier-cave-dark.css b/doc/html-manual/highlight/styles/atelier-cave-dark.css new file mode 100644 index 00000000000..65428f3b12a --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-cave-dark.css @@ -0,0 +1,83 @@ +/* Base16 Atelier Cave Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Cave Comment */ +.hljs-comment, +.hljs-quote { + color: #7e7887; +} + +/* Atelier-Cave Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-regexp, +.hljs-link, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #be4678; +} + +/* Atelier-Cave Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #aa573c; +} + +/* Atelier-Cave Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #2a9292; +} + +/* Atelier-Cave Blue */ +.hljs-title, +.hljs-section { + color: #576ddb; +} + +/* Atelier-Cave Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #955ae7; +} + +.hljs-deletion, +.hljs-addition { + color: #19171c; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #be4678; +} + +.hljs-addition { + background-color: #2a9292; +} + +.hljs { + display: block; + overflow-x: auto; + background: #19171c; + color: #8b8792; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-cave-light.css b/doc/html-manual/highlight/styles/atelier-cave-light.css new file mode 100644 index 00000000000..b419f9fd8f8 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-cave-light.css @@ -0,0 +1,85 @@ +/* Base16 Atelier Cave Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Cave Comment */ +.hljs-comment, +.hljs-quote { + color: #655f6d; +} + +/* Atelier-Cave Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #be4678; +} + +/* Atelier-Cave Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #aa573c; +} + +/* Atelier-Cave Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #2a9292; +} + +/* Atelier-Cave Blue */ +.hljs-title, +.hljs-section { + color: #576ddb; +} + +/* Atelier-Cave Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #955ae7; +} + +.hljs-deletion, +.hljs-addition { + color: #19171c; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #be4678; +} + +.hljs-addition { + background-color: #2a9292; +} + +.hljs { + display: block; + overflow-x: auto; + background: #efecf4; + color: #585260; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-dune-dark.css b/doc/html-manual/highlight/styles/atelier-dune-dark.css new file mode 100644 index 00000000000..1684f5225af --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-dune-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Dune Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Dune Comment */ +.hljs-comment, +.hljs-quote { + color: #999580; +} + +/* Atelier-Dune Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d73737; +} + +/* Atelier-Dune Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b65611; +} + +/* Atelier-Dune Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #60ac39; +} + +/* Atelier-Dune Blue */ +.hljs-title, +.hljs-section { + color: #6684e1; +} + +/* Atelier-Dune Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #b854d4; +} + +.hljs { + display: block; + overflow-x: auto; + background: #20201d; + color: #a6a28c; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-dune-light.css b/doc/html-manual/highlight/styles/atelier-dune-light.css new file mode 100644 index 00000000000..547719de826 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-dune-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Dune Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Dune Comment */ +.hljs-comment, +.hljs-quote { + color: #7d7a68; +} + +/* Atelier-Dune Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d73737; +} + +/* Atelier-Dune Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b65611; +} + +/* Atelier-Dune Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #60ac39; +} + +/* Atelier-Dune Blue */ +.hljs-title, +.hljs-section { + color: #6684e1; +} + +/* Atelier-Dune Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #b854d4; +} + +.hljs { + display: block; + overflow-x: auto; + background: #fefbec; + color: #6e6b5e; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-estuary-dark.css b/doc/html-manual/highlight/styles/atelier-estuary-dark.css new file mode 100644 index 00000000000..a5e507187e9 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-estuary-dark.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Estuary Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Estuary Comment */ +.hljs-comment, +.hljs-quote { + color: #878573; +} + +/* Atelier-Estuary Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ba6236; +} + +/* Atelier-Estuary Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #ae7313; +} + +/* Atelier-Estuary Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #7d9726; +} + +/* Atelier-Estuary Blue */ +.hljs-title, +.hljs-section { + color: #36a166; +} + +/* Atelier-Estuary Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #5f9182; +} + +.hljs-deletion, +.hljs-addition { + color: #22221b; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #ba6236; +} + +.hljs-addition { + background-color: #7d9726; +} + +.hljs { + display: block; + overflow-x: auto; + background: #22221b; + color: #929181; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-estuary-light.css b/doc/html-manual/highlight/styles/atelier-estuary-light.css new file mode 100644 index 00000000000..1daee5d9855 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-estuary-light.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Estuary Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Estuary Comment */ +.hljs-comment, +.hljs-quote { + color: #6c6b5a; +} + +/* Atelier-Estuary Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ba6236; +} + +/* Atelier-Estuary Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #ae7313; +} + +/* Atelier-Estuary Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #7d9726; +} + +/* Atelier-Estuary Blue */ +.hljs-title, +.hljs-section { + color: #36a166; +} + +/* Atelier-Estuary Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #5f9182; +} + +.hljs-deletion, +.hljs-addition { + color: #22221b; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #ba6236; +} + +.hljs-addition { + background-color: #7d9726; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f4f3ec; + color: #5f5e4e; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-forest-dark.css b/doc/html-manual/highlight/styles/atelier-forest-dark.css new file mode 100644 index 00000000000..0ef4fae3174 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-forest-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Forest Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Forest Comment */ +.hljs-comment, +.hljs-quote { + color: #9c9491; +} + +/* Atelier-Forest Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #f22c40; +} + +/* Atelier-Forest Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #df5320; +} + +/* Atelier-Forest Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #7b9726; +} + +/* Atelier-Forest Blue */ +.hljs-title, +.hljs-section { + color: #407ee7; +} + +/* Atelier-Forest Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6666ea; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1b1918; + color: #a8a19f; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-forest-light.css b/doc/html-manual/highlight/styles/atelier-forest-light.css new file mode 100644 index 00000000000..bbedde18a0a --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-forest-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Forest Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Forest Comment */ +.hljs-comment, +.hljs-quote { + color: #766e6b; +} + +/* Atelier-Forest Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #f22c40; +} + +/* Atelier-Forest Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #df5320; +} + +/* Atelier-Forest Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #7b9726; +} + +/* Atelier-Forest Blue */ +.hljs-title, +.hljs-section { + color: #407ee7; +} + +/* Atelier-Forest Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6666ea; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f1efee; + color: #68615e; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-heath-dark.css b/doc/html-manual/highlight/styles/atelier-heath-dark.css new file mode 100644 index 00000000000..fe01ff721b9 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-heath-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Heath Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Heath Comment */ +.hljs-comment, +.hljs-quote { + color: #9e8f9e; +} + +/* Atelier-Heath Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ca402b; +} + +/* Atelier-Heath Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #a65926; +} + +/* Atelier-Heath Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #918b3b; +} + +/* Atelier-Heath Blue */ +.hljs-title, +.hljs-section { + color: #516aec; +} + +/* Atelier-Heath Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #7b59c0; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1b181b; + color: #ab9bab; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-heath-light.css b/doc/html-manual/highlight/styles/atelier-heath-light.css new file mode 100644 index 00000000000..ee43786d12e --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-heath-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Heath Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Heath Comment */ +.hljs-comment, +.hljs-quote { + color: #776977; +} + +/* Atelier-Heath Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ca402b; +} + +/* Atelier-Heath Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #a65926; +} + +/* Atelier-Heath Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #918b3b; +} + +/* Atelier-Heath Blue */ +.hljs-title, +.hljs-section { + color: #516aec; +} + +/* Atelier-Heath Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #7b59c0; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f7f3f7; + color: #695d69; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-lakeside-dark.css b/doc/html-manual/highlight/styles/atelier-lakeside-dark.css new file mode 100644 index 00000000000..a937d3bf5f7 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-lakeside-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Lakeside Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Lakeside Comment */ +.hljs-comment, +.hljs-quote { + color: #7195a8; +} + +/* Atelier-Lakeside Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d22d72; +} + +/* Atelier-Lakeside Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #935c25; +} + +/* Atelier-Lakeside Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #568c3b; +} + +/* Atelier-Lakeside Blue */ +.hljs-title, +.hljs-section { + color: #257fad; +} + +/* Atelier-Lakeside Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6b6bb8; +} + +.hljs { + display: block; + overflow-x: auto; + background: #161b1d; + color: #7ea2b4; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-lakeside-light.css b/doc/html-manual/highlight/styles/atelier-lakeside-light.css new file mode 100644 index 00000000000..6c7e8f9ef2d --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-lakeside-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Lakeside Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Lakeside Comment */ +.hljs-comment, +.hljs-quote { + color: #5a7b8c; +} + +/* Atelier-Lakeside Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d22d72; +} + +/* Atelier-Lakeside Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #935c25; +} + +/* Atelier-Lakeside Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #568c3b; +} + +/* Atelier-Lakeside Blue */ +.hljs-title, +.hljs-section { + color: #257fad; +} + +/* Atelier-Lakeside Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6b6bb8; +} + +.hljs { + display: block; + overflow-x: auto; + background: #ebf8ff; + color: #516d7b; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-plateau-dark.css b/doc/html-manual/highlight/styles/atelier-plateau-dark.css new file mode 100644 index 00000000000..3bb052693c1 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-plateau-dark.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Plateau Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Plateau Comment */ +.hljs-comment, +.hljs-quote { + color: #7e7777; +} + +/* Atelier-Plateau Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ca4949; +} + +/* Atelier-Plateau Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b45a3c; +} + +/* Atelier-Plateau Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #4b8b8b; +} + +/* Atelier-Plateau Blue */ +.hljs-title, +.hljs-section { + color: #7272ca; +} + +/* Atelier-Plateau Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #8464c4; +} + +.hljs-deletion, +.hljs-addition { + color: #1b1818; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #ca4949; +} + +.hljs-addition { + background-color: #4b8b8b; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1b1818; + color: #8a8585; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-plateau-light.css b/doc/html-manual/highlight/styles/atelier-plateau-light.css new file mode 100644 index 00000000000..5f0222bec1f --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-plateau-light.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Plateau Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Plateau Comment */ +.hljs-comment, +.hljs-quote { + color: #655d5d; +} + +/* Atelier-Plateau Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #ca4949; +} + +/* Atelier-Plateau Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b45a3c; +} + +/* Atelier-Plateau Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #4b8b8b; +} + +/* Atelier-Plateau Blue */ +.hljs-title, +.hljs-section { + color: #7272ca; +} + +/* Atelier-Plateau Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #8464c4; +} + +.hljs-deletion, +.hljs-addition { + color: #1b1818; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #ca4949; +} + +.hljs-addition { + background-color: #4b8b8b; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f4ecec; + color: #585050; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-savanna-dark.css b/doc/html-manual/highlight/styles/atelier-savanna-dark.css new file mode 100644 index 00000000000..38f831431c3 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-savanna-dark.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Savanna Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Savanna Comment */ +.hljs-comment, +.hljs-quote { + color: #78877d; +} + +/* Atelier-Savanna Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #b16139; +} + +/* Atelier-Savanna Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #9f713c; +} + +/* Atelier-Savanna Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #489963; +} + +/* Atelier-Savanna Blue */ +.hljs-title, +.hljs-section { + color: #478c90; +} + +/* Atelier-Savanna Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #55859b; +} + +.hljs-deletion, +.hljs-addition { + color: #171c19; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #b16139; +} + +.hljs-addition { + background-color: #489963; +} + +.hljs { + display: block; + overflow-x: auto; + background: #171c19; + color: #87928a; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-savanna-light.css b/doc/html-manual/highlight/styles/atelier-savanna-light.css new file mode 100644 index 00000000000..1ccd7c6858f --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-savanna-light.css @@ -0,0 +1,84 @@ +/* Base16 Atelier Savanna Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Savanna Comment */ +.hljs-comment, +.hljs-quote { + color: #5f6d64; +} + +/* Atelier-Savanna Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #b16139; +} + +/* Atelier-Savanna Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #9f713c; +} + +/* Atelier-Savanna Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #489963; +} + +/* Atelier-Savanna Blue */ +.hljs-title, +.hljs-section { + color: #478c90; +} + +/* Atelier-Savanna Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #55859b; +} + +.hljs-deletion, +.hljs-addition { + color: #171c19; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #b16139; +} + +.hljs-addition { + background-color: #489963; +} + +.hljs { + display: block; + overflow-x: auto; + background: #ecf4ee; + color: #526057; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-seaside-dark.css b/doc/html-manual/highlight/styles/atelier-seaside-dark.css new file mode 100644 index 00000000000..df29949c69f --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-seaside-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Seaside Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Seaside Comment */ +.hljs-comment, +.hljs-quote { + color: #809980; +} + +/* Atelier-Seaside Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #e6193c; +} + +/* Atelier-Seaside Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #87711d; +} + +/* Atelier-Seaside Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #29a329; +} + +/* Atelier-Seaside Blue */ +.hljs-title, +.hljs-section { + color: #3d62f5; +} + +/* Atelier-Seaside Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #ad2bee; +} + +.hljs { + display: block; + overflow-x: auto; + background: #131513; + color: #8ca68c; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-seaside-light.css b/doc/html-manual/highlight/styles/atelier-seaside-light.css new file mode 100644 index 00000000000..9d960f29f38 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-seaside-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Seaside Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Seaside Comment */ +.hljs-comment, +.hljs-quote { + color: #687d68; +} + +/* Atelier-Seaside Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #e6193c; +} + +/* Atelier-Seaside Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #87711d; +} + +/* Atelier-Seaside Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #29a329; +} + +/* Atelier-Seaside Blue */ +.hljs-title, +.hljs-section { + color: #3d62f5; +} + +/* Atelier-Seaside Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #ad2bee; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f4fbf4; + color: #5e6e5e; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-sulphurpool-dark.css b/doc/html-manual/highlight/styles/atelier-sulphurpool-dark.css new file mode 100644 index 00000000000..c2ab7938d84 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-sulphurpool-dark.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Sulphurpool Dark - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Sulphurpool Comment */ +.hljs-comment, +.hljs-quote { + color: #898ea4; +} + +/* Atelier-Sulphurpool Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #c94922; +} + +/* Atelier-Sulphurpool Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #c76b29; +} + +/* Atelier-Sulphurpool Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #ac9739; +} + +/* Atelier-Sulphurpool Blue */ +.hljs-title, +.hljs-section { + color: #3d8fd1; +} + +/* Atelier-Sulphurpool Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6679cc; +} + +.hljs { + display: block; + overflow-x: auto; + background: #202746; + color: #979db4; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/atelier-sulphurpool-light.css b/doc/html-manual/highlight/styles/atelier-sulphurpool-light.css new file mode 100644 index 00000000000..96c47d08608 --- /dev/null +++ b/doc/html-manual/highlight/styles/atelier-sulphurpool-light.css @@ -0,0 +1,69 @@ +/* Base16 Atelier Sulphurpool Light - Theme */ +/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */ +/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ + +/* Atelier-Sulphurpool Comment */ +.hljs-comment, +.hljs-quote { + color: #6b7394; +} + +/* Atelier-Sulphurpool Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #c94922; +} + +/* Atelier-Sulphurpool Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #c76b29; +} + +/* Atelier-Sulphurpool Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #ac9739; +} + +/* Atelier-Sulphurpool Blue */ +.hljs-title, +.hljs-section { + color: #3d8fd1; +} + +/* Atelier-Sulphurpool Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #6679cc; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f5f7ff; + color: #5e6687; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/brown-paper.css b/doc/html-manual/highlight/styles/brown-paper.css new file mode 100644 index 00000000000..f0197b924c1 --- /dev/null +++ b/doc/html-manual/highlight/styles/brown-paper.css @@ -0,0 +1,64 @@ +/* + +Brown Paper style from goldblog.com.ua (c) Zaripov Yura + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background:#b7a68e url(./brown-papersq.png); +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal { + color:#005599; + font-weight:bold; +} + +.hljs, +.hljs-subst { + color: #363c69; +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-attribute, +.hljs-symbol, +.hljs-bullet, +.hljs-built_in, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable, +.hljs-link, +.hljs-name { + color: #2c009f; +} + +.hljs-comment, +.hljs-quote, +.hljs-meta, +.hljs-deletion { + color: #802022; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-doctag, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/brown-papersq.png b/doc/html-manual/highlight/styles/brown-papersq.png new file mode 100644 index 0000000000000000000000000000000000000000..3813903dbf9fa7b1fb5bd11d9534c06667d9056f GIT binary patch literal 18198 zcmZsCRajhYlWil7yGw9LaCaw2kl^kP!M%at?m>cka0u>ctf6s&e8CzTLSrGMaSIUS zWM7q;>fa~s$OpT> zFLY-GO$7j;Wl{{7eE9cF?XPU&ukYpLA870A2vBhFvU6lq^RRVx)N{0T2=eQ4J41(5=2G+8;)w1ZEPMkbF2bGnazV|OLZz2Hb@=WyXBX0)f+0o;fWze0N{t<*y ztIiNnZC{LRA&k!$ZY8RSSkRr34SfzyO1FQ1#+`5DKBGKIaW*#IpS|)H)0b)RO)vVT zdmZs``V5~Rd=7^niGNRi-KohFdl7;cLNt=6H%jET$<@@a?HPC}DI+UeV-R$j(|Cgb zovyEp&h`&JS~h*u+dsTgScW2zDVr4f~DH;Zx@cQhlKiyzUik!{j?26_bcGl3n zz;xi(8ENgs!;6LMT9?9^)|SgIm+Xu<9pAn@Jwvr@j|kU$Ps<;yJK|Ptilz{)cF~50 z>3}X}-GE2L$gd5vToUcA;ufTe+vCmq6y;EHLIF1Y)!*mMIk7Ufz`-6@{%j+0t}5by-kjAimHgt*AfoWQ3<}2%HH1G)X=gxwsGTnqo!jS zPp^mHU)Wdo9i$J93f_cGL~o081HVh2MIfFb&r#24&zMhy4-B`@-M4wqKeV5e3rOCk zzfxnXb=ed%7QxZsGFZ!Bk=ojIqXM0lz`=t&N`(ieb`uT$vaWG--x!ps=kokELG7^v z+{LRR;H>H{+#Sy9)~}T-X{s*WDIF9ko?!YOUrBL6c1UTt%|c-C%-R`h{*D&-?xTv6%U;Fy)q@zD7n;Mm&VTYo!f>`4|^@IrUrWqi<2` zIK=%8Y>k7_cJFc62Fm1dsu5V%^D!kOF(oA;3duw z%pO09{DvbtIv+U1{6MQ8Wq|e~4(8RFaZSiu$ z|CJ~BTvRLdM64V`xYr`XpzSoka%-H{0)Ro-jT6+} zT18|CY&T<`K}73~WMQMkzj<-{e`EjOV2Ch(n321C+#16;>MjIhblly|M?Br0UERMA z8yIvk9sVuv0~h)1=S{wY{&V6fDi@0c8|@S!>h`gR_^u~(f!y=uu=3o8U2>$VV-mwV zeJKl8K*mz%0O$3!XmmqEd#rW!>oY?U<|?CBsX=UMCSrinA}B9GA5MTUzn%ILQD=}Q z^-qc}to5D!{UYEBFfSF{7{}5#I2`7!9Xcs|{e!rTVYvNetFc@43N$#e!DM_Y#5_4V z3P*)qJyw97IJGZYj53iEQKK~Zk6QE|wnDAQ6e%ci7WM9yX{3Voy>2v7-{dW*|+Zvy7%^(o^DMc&%_Tp}4@Jo%0Bs7ObY$K2QS=1v19slY*WwV!8B05I;*7gc| zC}iWT!ocL=zoXCa-*EVkQZPGoFVou4>|(ng{&T`5ns(d;`0IWRE4$3aCE zX={pif)xfKL2J&CwL-rbsVhFX~Ast|24AzGCb$6bP zzjP96&p17?0`zA}Cr(1{- zBWmAc^Tih%c@PSpJD39Rtvbpc27|&`W}18q&trP3z4xp%4^t5T!T})zWON*!hQ+0C zGnKXI-(t5+$xcN_*!vy^Ebcn(`}3GQ=EjrR)jEu#)a!Qo+uU^L6Sf!vtQo@-)YCH_ zIkq!}#RQ?#H9Na)c>fA?i%F=AwN>+%6IHG_6~07@;tNMw)pj-py?fm5OAkUXC)Brp z)eG?cTAV-ODy=aRrlcS^!0S!95GOO@_zy6Yr~oZODHiWB(rYDHVW+oP+iSHanvW_2 zD+33#kuvw;P&BQf8OM-`63t1%h)cdnm8}>fIrS=425~>gpk!*nOPF^FRJ!}0{NO(e z1ANE&sU_mPMS;Pw9^8F*v5!k1Dr?=^%?eWij0f~to7y`V{K(<#9fgxsh1qZ}irc;t zApc;fE}TBG^?-(ZYfC3hk)rzA9||a50&`5$fOMODInB^CQQz-%|FVW(Me6cd&RQ!Em*`8(cOiTV*}I0^ zkh9#bz+b`^Achh+t!T{E%m*7Spr8X*#NFvrNeQKR9N#NYImXo$orFW}S#|kp!g) zC|mslRtj z{<(wk5heSmNTLQPjVu+tu`Ax0<Jp<3;sv=x5%C^te-lbQRUIA>ktvMAj}|$FYU$Qp}=T~;pv%9btR=dxklUy zkR9E*9e)3CPHhghYGI4o&yB<6Ek^@&s6_$^hHm%y;$mG#6s2Gj@yUh|7NNvbZ*-CiW>(`$PB*?kxl)}lSZKB^Wx?u%oy%PiU;Ucb|V z|JbtHI`e>wDu43V9mbmTz-O*hsj=x3p@_52uHWdv$KHWXIJ?hAN_O+SE^)}7#rG|6 z_BKM`Ghwpm2fNaI-XM&&0MIfLw+nk~2$Q9!(m1H({sIm*PjV$tD(vHzF8J^I z$5d)V3#P=#{X0~lkvdz*hO?2|P39$67m%BB>cJ;P&i?e>f6oD0A_x(fXnlhN8_iy~ z=8_i6_?scR{Q@F{<_+s`6F0?)4q>Y!TZURG@z1Xg(XF|Uq<7M}+x3!5CKzKPU%EBw zWsc%dMB{e=rbNFynyQz;$Wk>xdNDkRB!r}hPlheoBDRi4NdE0U68C8T=FwmB)E|du zu(3Ry^ER}qt8o=s^t;)ka7?Rw9BkK-AbMm!5YyN{n8j%4(FS=#^NXNFzOKvDh-fh_ ztrMuN#+;}%O*fdC_O-zikI?cL4FkQFbMJ&%;LsLdp2pU1z81byeDrcnfVfSPjd&Tx z0uTNCRa&zYgwCK{AP>=r8Sx{G=0I#zQ4SAF*CLY5@Ge_3>$_ebR&z8QuoP^G_nMbA zR!J5=NfW+bA;6g4yh|56J$}zRiUEt*T!NqU4MM$Ik(YO5ElC z3I>TTR5(&RS-e$~mJ610i3Tb|O!%oihx2Dou=SDi zY8QGbi&iMst0x9N)(Qw|m<=v9=H$h=d9q7_RC$8&xiTCpO(nAT)09jNd*kDz)xA=d zA>mDJMEO}wm=z8%##p8Epux^Z?6*hT+bBf^Yw~9wh1mOBI2*B_&;n6YqN$_sLi+`r zN+}oUEH%!)UEZO0kGwoV{fV0125Liy{XQRjOG;ll15xL$5w(ynu*BE#Y!uUbJlqhC z*)p9Akd=!p3VXT;Mo_Zvej_{xJkq)x&0<&B)@Utjud|co5aPb~dM)3OKXKmRzZ}RD zt~hR#D>70m`e$6d9RY-q2@W6QANld%IvZ*VmwpbdVCzWDJ`&UO%hC*(c9AJ; z8qe|b;=knC|ZRghL9-j+JpIpBjS zLIz{G#rkZ%K&UOs1pgA;bi1JjfXryT;9AV*AdF1(P;A$V^MMS0X10gTzoNjJBTB;U z#kJ5|QkG?|zHY}$^ddtj_$wAkIcd;Wk|&B6^`fnOL3uIPj@Z+b!gftAC_YE@sh~EY z@awBver>U-j(pBMf%*W;OI?#3J3yRO&^PqFHW`#yr|%#0rDM+^ZV zw!IXpiDk0Qo5iL_mNZlA`+m>mgyn-Z9( z1VK4OJry2Iq?o90-NhDNVAP3Niev{MJh~PQ7M5U9?Ob1#H}q=Dgn%~Ng=3b;7jX>n zADv=?=pgaOIN2G2JCr_(7k0YF#OlE0c}by4_|pb-iJ-CYzLbWwHs2A)ZY;uuYwbQMUa1ed5)1G+DXr$;MC*sQ-N@4$xD327+bTrT^ z?kmr?X}=Lu2xf7X5|gkw#k>FEC139#QtL*Y>C)kvvqB=d;fVQ8{+;RhP-)is9rX&jj-Ik zT00%|O4wv`6`(M(&W*hs2A z?qIa9QPvO>*ssTM+$((GcA1>?(C1jm10t6@Dy(k%HtIN+5d!Bk;~J%32ZhcKu$-i2gOM1Ek)Av0js<&PBErK4 zp0BqauJ^Yy7bnHdyGOO!FbWP*qG)O@I>y%wAIOX9eD)7R>ow6xlYRy-h|ZmQaLshv zm7r7H)>I5~>_i>NDSv6k)mCwZu$9K6)JGn#ni#>O5}3aMrYt7e67}_&zNlt_@b&$n z)VO|sK6qnt57(FA0!{d&$}h!DdNgOgYMn=8${CJ>S2YIAe zYh9atd77_K6soYC+WALnJL7SxqnE#(+1G`m^0I56gta@e+L0z>IRG+?>DS@Oe-NlQ z-mQ)F{=7b($L)X@jB5Ot*D*>ceMR8793ItK-tTO`iAnNm-xzYn0#;&=gXJYz8KmnUBrL#cb@ELwnkp?O zZZ{8tSRklRk}8Ts29G>v-&z?qob#qYSe!ek zt^r`X2W(J?(qxhOf%h#^?8D`^&MPbuUE9s z$80u<1iU&&+mQB<4bZeyBaOB}$!d@`^f4+iXS3;h>rXP~*FRrr)Wki^(q)&EwAMt?71xOWwtXa8UsY(_;C*7d*d9Z z-#(@Mu>`+6lrEC|=E^q^u&A=e+P9|#`hdP0Rg9`gUbNqm@!-Gg-V6vL;!*U<4ZtIa zv@cWy_^m4cV=F@sv3lCwx|?r%lb?NGQobaW&#Mi<9dngpq({-uy?xwAR&#MBUtybddE z1Ka>|_TRpK@#mBE#M;ka;RDR*2pXmP#YHG|5qh#YgXDUPD*cs3)>>Co@wnbArjo;_^QGnuQGdUSqu6AMPxBHbW99c9gHFZ*u&-M5cS}n@d z@wWUbV?X7y#NTCaqV_t*)w+Vzpte?L^08$=xiju5lCZ4~#~@34qa{rJM!{y~Tqe5H z-`N}U;ZKj9jnYas%EXCD=*$|XC$h{m@?;&T(uT--QOR_H^PcjyAP~pc&dS&v#J%KN zK|)APC-pnC;EKdibKx8O+Pqef? zY3J^)uf~;VDge4m$gh`Aj{?OYnES!Tftm1kjZwLB-5soBf8q9RaPk~e{SqHq+Gh(R z<}KbtcWaoIC!do+k`h}5s~QzJ&#Ro?TzU_eO^xAgvNoX&oKS7|-8Lm;%2@BRKwb9H4rRICqXPIQLdOMGtG>0(Kh}5xDzW z<`R5ub7|^ov6hX(i^R_d6ZdLQ5t}vu@?2|ueBl^W!CoR=LZ1Urel(cC{`jK##xJ5Z zW6m&PFV^e{7~mrz4!xy@n!O%C(vIRG0g>FrE1t+=n3;z9D!vWHCUjqMi*QAc4!hId zk9MAo2%jf}g*lzYPM7_RYQxo3rJR%jUCd5FoBmmSn@QTM@?QERM*E-uEb}GD!7+W4 z;ucS;Fa1*ZgF9U&8>R&|tjy3FH;93-Kpof^^nCm9kp4U+SFqwi@6}>$jo4)7x?L*p z5eHsG=We;aDoq*x+H6v7x39;dP<1mgK0fQuG+#L+=2<$z#m5Z5 zCEto{j1wIIxQ(7>!yi2iRgQS~c_6N5JHqo=$`q=PD?Y@90#727stD}1n!C~qy z1q^LAqT}jq4r2TFIf&-|vYu|DXI}0>^}2ev5jUXZCM+ZOWL>l4t}d2Pur%y+XM$j(Cc126Ww7ST~4S;g=2q8j3!|OoWynEtKkuUjZ>k za%azP+sS^P^KJ=|`TAdnlNkRHqn@0nFWdFeMoI4-_sH22UA`hq_xA?B;_u;ixDrx%9ajWMqLgzfYCofw8KF`gO zWh92d@!_T((;rc7)Y0;~o3^0R^ALS8opgP}hX%hpsuO^eo@L^`#d1RJD{m2kN6wGw z5T;|y=;jNZl}W2j;Bc$yGn_%Ti(Jtk4%` zDK5cCl`%fdh(p%F! zN4;@Huf@ukLx1k|0(qt;@&Xiw=4#8cVPcfFDX~atn}9jl7(Tz#p-Q|4F%ywo(jlv# z%qISsaHlw>1|(CS*2KqRSCP8NF(6NfJ>HP|lV`v4llSyqeD!0%X_1> zg{vvN5D0m~n!O3#;}}s;n>z%iE0e^EX_%IQaWRp4yx4LOzqV3T+W(;k{udVh!#EJ} zgnXu%H1P~HO=bwcbt57%T)u4QT05g9BA!O6PoHP#DPg-80&W|M33F=n@!{4j6>-=9 zl9KJP6S3H+U>;T?}#WA z_O%upq*IdOTe9b~q#{Y}07vk515LC)Il|+Aa$f}Tcr-&vQOIH)UZ$6& z36g&<+>7?MFwXUe`uwpa`gVyIwLJn~p1QK-H&X5vGa};Wdy^Q_m|$Lgl*a(g9EO{h z##w%7(g(SjboyvXP~vP72(|N1)ZI{XNa-&bPjF54D`q-}^mUm=DGk7I_a#t~zNU)> zJD=vyGTVi2y}*&qMByXD3Tn-Wj|5S#f( z1uWJ`3RnO6rh+Yy?c=B~PUJ?nV_{w6l7FulT#(2M_~r)HsCX+L?$5L39mEvBSU`8$ zYq&EhHXoxg(J-om_c-fe@=~3q#OG#^kYLhMnV)y;ZF6Gqz_mr2P zugbL0xc8{kyxRcLC?m)K&Yj$%)>_B@og|1@e~QPf=dh!p2dBQAtX$a~q4}AI9ArA; za(4@-P0mv5dlML~u;DO#U*_mx8yZv31rn3O5F4pLW;#xXKA<~u3@cMIw&h)_VR
    G3S-EN>9CM!{YB*|;6wg-K3V?)eR((z#1 zHyX+Us~H@9)~!8`K-#ZDU>v8HpiaQ|@=VU5MgT@ehzQ(1nZ!M0ZDk{Fb`>pCb0vQE z`gX@ZK}6S!(-($v3w8-+L6Xs~;@WTrR}q42gH9p2ncZYDab8*`#p8jbS&H9$DTx{1 z|8L)r+}X3oIp6b9dN^fZsl0TpRK4NW^TVGZOit8~r*qM+QL3pd7G0|~C`PHxw2PM3 z->n8iEh)LU)Je%r7nEt|D%&F&(={XI*19z_HKI38aE6Cfm-buU7W|=mo3gMA57~g` z7aBx4OS&(O5w@W;2pO@ZVyG;2^F+2cYshx%M2*M@%;(4quYc}>z1WX(9ccb&>8#{j zE=VlFg+&2-xsr%AY_}ciz4+<$^}2TO2e)byPmJl?+aOU7{UVx$=ZNQDTQLxsh}+(_ zak-NBw`v4=+Ydp_L=w^J1&NT$-AbEUuj%8LN7nJzt^APyl$(ght>;(o{)xCqf8IX6 zq`a-CyPq$UOPJN(oo>$gX?v65Y$GnIq7Fq?=??};kY4#Na69k#iG|Wd|{Tt z&uFLgaDQ4)`{9^3rX|Bg zNY8N2w1??HVsq#}Xk&RcmoQBacog;CZ%I-HU?7dT+nZRo?h7BQd5Yrv%sI0rPF^Sk^9@l-_4``bwK!A z5Ud{#8B%fMPHat04G9kj%j5>0maQK}jQTzGC!2<9FicZ-#V^ZaC)A?QK9EelA!nP) z+Z2DqYAqTsfZ9k1CW9+h;Uao59}OnJ9>r}xs&nHlM5^Y58T*TkM80zn8=UE2e8u{j zpH(Cv<_IWBdh<6_f1={d7#R|wGLcIoegMU>82VZLrcn;{FuCmF59Tpu7qQ5TEj5`AFXQxx{XS6|0N# z3g?J^0RDM8_l@3M4G0f^O03>$S#_it3cdG%7HWo_Xb-<{a&XHHzW`(2t54<~-m{AO)J~7AhPI zbkz9A9Eq!7aijhY%^=rG`j6?w^hb13^_LKf!X*}jaV$GaXvsies~+H0T#v%OcveHN zw6t*A@XdVfqJIPsPwPO4;>%M4C+{dTVU{cOk`3puW6b36K2&z%>btSk&&H>Z;<`p> z`FMTMiHw&wOXcQ$-Y{pG@3aN}s_>;# zeQ6GDsqIMA?iz{B1XzIIegeu-#qL_ZBH|eh`L{~J(A{bH*vND8W}io(WZ9s;;m3qZ zElXp!ru)Ht+yJJ|dfvRtcX?~Pn_nW{zZbM5z3mB?Hbf_|+7ZC-9yVjR&7mnNul4vE z%KEK*b1~tReV{kNh2E=&iwgU8w0kYs3c1o6m;*fZfrF-g?1!~+<-`f!Dj8+i7NJUI zcZj}vt?|8iHQ3TdM;gn(X(Vidn!cd{^x{>dX&Vt^`^_3pu?t)#>x|K0cW=egSMl9#+mqq-8|RdMP1Dw zx^5}L#|i6)ERW8LBjm}wD6@3$`!cXl0aV*W>(xz)J2m+v|RNGEXIA%XWv z$Hx$v!@W5LfaU7iEY}no2e;*F&dh{F;<$?``JyH&l3RVjA{xC=Rq{ z6}dLQKK(BW4N!Y)Mzd3h)PX8L3OR6JX82vsk%|<`y{3G<99ycR8(ZD;4@=k|d zx1nPOrARPmMi86c#Qn^1g5RVk00)%LY3fdvDm`_|D|ZP>a4hmnJmTiqc40*eItZ0G z(Cfxe`6oWB{4L&V2-lf)Dz{MkXQ(A{E}?e1cWU;s-J?xBbGBUgebeTI{+k+LT|P=A z;GHDn*981}=hBJAGXPX?iXEu)RoZN2kKn)}Yp)=+)%`(=Hk2z^Csu^a+hNSE9<}O4 zW9BhF843QW<{+N^4NZ(+Ohu0L$qp9AhpJ?UbX8~fibx(>f3CRh|ZH~FPW;%L4 z2Jfb`#^2zr=0rNvM5{6`q6x-M;QJ8B$W1lwJwBT6OTa+L|E?*68NnD-d zqirI@#!DTk6=nvBq1t|F2a57+*JomCoPO&bkNHd&fq@7CoA#=ogI@ER;^g6MTjnNJpU8$17lkcby!fn#Y^cf59qs4;WjW9@I`pu+^=!$XvlzSp zHl-BP6qCLifc*pwQ8vDfUY0lgjC>>zTLL$6VLQBKH2U4M(&?%A718nspPj%tmUBw+ z#X>LH_#p;`9!I5vv6@cVh1b)~bHTXz;!@s>4omWjec#A;((g=Fq_p{u1|<#I-D{h1 zr%{sZ%zv+3T?)s{c78c|r6Ez1kf5OuRJ<^!_`!;|HxG;mZiSf=CdVqy^)Fpf= zR6<3YrraF!c1|tIJ#;9sg<)`+=a+cw8*6)$-yV3w_=*W`MB#~zjz6^LYX4eVoTxdI zc3h_Bc-v+z^z5>e3vEp)brfA?bQ>r1^-8x`-ATBNL)99$& z;rXG-!IBn08OxyuZoj`hcQ)a@7O5;d=o7$6_hSTJ z;(^Dr%6p+QhE473G62?L^T{&S2^UB8^~fFHE0@wP^b_T#h%rn7^=(?yQf+N!)<~#c zB&mh#W%khdZrGJgs@ixb%h?ad2HG&$G8+QXR6zbUk;$(r4F#>F^1>Br!mAfDkRR@D z!K|#|oQjAh)DlY~3|CG`+4@opGIM z^i^Z4rXu>d*NVXngpKKI2U_*K}S3_}=T|7q^w`XB` z2D5mfvT(`vMwh8DGJql?=LI15;DsNI&n^nhYwgI&-{a#V-{;<=cJWiZ5HEkDY(4jD zc2?xCALMIz@)_iwDG(vRJQ8kP7xC8|N5n z-mb8AOpEdA->ZPnh_c<&o3Jg+X;AwynF(`1Ihpp9xt|hy zu7!?dLSahdVg=JpZk#xq{L7i0Y3(N`w+}g zn}vYJKK$VH`HhCBK)g%Cw8flu&$)8+Ef5m{+5}|bRYsP&t~Jk0TLEENO=yT3nrvyfYKk*n#uYjkyI9wC{A(mO8ae&B%;9#dTh)|_V0}&D>^xO(UZ2e z2{_|CZ)7#U(3yWf5i9##7`c79OX{6Y8(moRVE~tW6|XopYg$JLlxm|Q3X{o#=h{Lt zyCavxXR*2;2qGJ^XJ;nKfb^TpVwPUUM{br*(tWeRu{4Id4v!3gY2#K~T^)u_Zer}E zn_7xjY>yK@ouN|9;O0P^ZRT#CcRfGYf%F#Vs;VRb^a|0p^Z(QZ;v z_h#9VcRfJ+!d^?N=4N?P&mP&Il_OwCQMpD;0zHfk@ay$}8TVzgO~mUpV_LitM@Q8z z?9S+w#)-R7Wlo;vsZz9D@#pj>8Cxn}a*?q4(u0!Y^j5C?U$fc+Q?CL`w3ANg?&_1 z?FycB-DhP^mg2^y?@lqA_P>^f{|QRaU~igN=blSkS9CZwMjy&9MHhfv%{2!{eynf` z$pvnj!j!PJ^$UUrQOmKo@@YFMK}y`iI9Na(F-H2m)K^;G@|^OUI0RWuw$|>Zi>>4v zq8|c(foEJT-K`qR-DS&5P&JlKeXe6o?f)$qE9Lfsl2!ik}0GeaVk8W1YV42f9! zrDpRi_q@-CcyuXkqt%*k_=Sc09&?96Tu==56A9)J#}xMwb)PC2fO#x-Caabw>Rn0y z{HI2_IqLYwp=X|p=?Np~=954+Ml?kfMhR7O0xujiI*!b{uTA~|{_q>bBp z=-{T8<|tDq3CTI;lW2D@h@1>&cH*BDa_y{)8j?pQ@ST4-bycb_leaSjIqXOg!I-dI zwNUCuLgX|9CoCb|R&9g{#A6D$#nUq#?A;pr8AdUx?+Mg??0rWBc7w@CmP8$GxdE}e zzHzq~`$CYEEw*mQui5d*E?e~uhB&}WX3EcR8?CKn>HfFzpYY*7uYx^#J!@o8sI_T# z<9>7j4!UEiu=RQ98@44ed!uGToSby}kzEY$x!v2ihKXiyj2);!CRiFr>vI6V7wV&~ zpF$-W<*Q*jZKoda1CDyKwXd4AY%8NW?9?a@Yy}T{I z8l%pzl#*N&hVTtVAK9|*u$h3nx1=6hC?%PgdUH$1 zgU4B#9LvX`-GA_Cqken?Okqp8ZYE~ymacnbL{jExU#!eyp{f&~&7KrUZ(@I$| z*^;qz>W?cO%fU+}`r^A}yw+(=Jny@=CHlQvYr*sZn~Mq?a}U+deU_vMDx=p%_S zeq4>UTvg|Ns%zPo!tKDK1jo!MHXs5k!B@$&Iw30U0NMQkIcpzN?DYb2*ymZtS+0tL z|7ZN81f&h|3Gcxa1-K}FIu}UC&Q5;*yA>^uZA?ny{4)}sFcUL|IrhZMoeaaeLpX1W z;w-j*w2UV02#G(CdabMIPx^&kQ$y&xwe3xF%dn^Zx=-2>R>1)!wONiAju(G&X}wa&e3M9e@y*jUOnq=Da;aeY3U?)V#0wlC4b>zD zYg41RpwFSrtQS5)@i*U(!g@ZK3qpF#ekkwhzv36}MIRhhvDIX_{kvF-w-i!URUy&1 zZ(GVLd13Rxa`n}=54^&rT5t6b{-~*ny>~1i9TpVYZ!wNEQFHytZc3QlVJihZ*&r<0 z+pVZ@C%9pIE7QsXE_Wp;lEw)G|JA?Qr?Kw4JQlq%?zBMH%3 zQ6JVx`e*&{{{B6UR&7EDCoSR>Ia4d+4zz1c4JkkrJzYuTQJ&qreUvcDtG1l9xOB(^ zrc~7sn*MO0arcJ>5^dNJY0Dd`dhvNp0zvzsHa0TO=<$99GqoAfRNXiNXf(!*IEnmP zr8tbeCb^b*$m_VvC6g&*bjtGqCpo-Ox`{)A5lw;yGH&b+sGu3`p#9`TQsPue)fUR< z&`V+$NVA8gzWIS^yrU#20h!!^9m?LW?#vpgS2M(T!&ts|UtGu)ibm12hjYQH3>Qh9 z&4Gq1i{aI05C~XPmovUh_g2b!EvwQ{JyK_xNk>x&ulaux-hYGOKQD&wmOXCwH|wi# z>ZA;Hh-sqvZJyfmPTTsim;OTNb>l5w$r>9)Wr+8Y$ptx_kA@kv@KugIc@7s51}<>$GYQ56)Ki`;R>$*#5fm%=a3oHXA{2r ze(gE^q7@6M#NOKDk?lQ!5v+|OS})<3Q$-XinH=iC%oZ$K*8mR&EYajonfKIB3qJw` zEh)zGw95_xD1yBg7v#8+sMaF^CW02x=1c30XZN3`1|S3xsHPU&%AtideyTVxW^pmN zC+CEKwcWLdiPK%WA><$Zk_5~1-n5;YlQ3aqhz90Q0Xyfxt(2@|0?VzodBvU=`;yT2 z97iv%rVlOZAzEh~-1FWqO$aNkyaLq>*<|?mOs(GR3FT392W{moZ;HD&I)GzNjoj|$ z6#h>D!~{G0fG#7m_{NwN;WBo+FBYH&u^ak!z=N*W+uPe4om4A>NYVy$G_k2Ag|NAO z1wvW{1B!~LGZRF@(ZG@sG?88UFOlrO7R5%3$!Z0a^39~K+xO1U`7jU^5z(@hy;s>te8_ua9x0Q zn(l}+Nj+K~g&_``wy#um;Qzq?f&T;l2mTNIANW7;|84Ov|JCpRS8NUz9_W9coCNv_ z?xl52VVa7r#b5F5PRa<1$EH=S_IdUhr^0@&t!&FBRvJ)_Pg&>TFXt z;Him`;9z20Fs(B_&VW(!)c3M{jzBor(F1Dq}caD#skevw=^xy`W{jSaVH-|RF^ zSxJ<1s$c_lG4y9pCj12Kt805nHipE(fmI(remtK}i2v8umpU5=fE&6Kz!tKfD5{zY zco!fp1V_e}JZR%cv(4G}(kNtwr>75|O)au*I`|}b#FsjqhIe!NJ-zeaOcKF`RqzgX zM*JenjN>g8sc(CV9npdUo7l-3T~TbOt`ob-!+y>EHiCg>^;n^+rmplETdVk@A`cVT zA1`NM{`03FQ?x4Ad8O#s9fGCv7?9O}iuG`+X$PzYMAI#+5>jAk1=DDL4Zw~OY#s>1 zQelFQX}adIQepTSq~Q#Jb(w>Y{qR)gW)Aw04L6*=W|uYVCY8oiUWoVZpBMokVRv`n z|G@u&{{#OA{tx^g_&@OfZSgOE^Xp%o&t1c5t;L4bTyJavWpxv!`N2~II|QWnuI)Ob zYv3~hzdJ|?XBxHj0LyR7#yX)CPY)MQMfjp;JB;mJUhwT5L@?^+5I~?-#K5{H_o>s$tlw9%!2JAO% zwPewi-QXC{!xhKIj#2sjTTl)0}n}@N`7N{W=1DLw7kpe!!Zsa-=pa8*m(NH%XbHdb1Xf#@^W+ z0!Yl(Z&WF*q+t}rJ+X~J$AAkhsNVDQV?(l=i7Q)eikH_fxBDBC;`#gl3*YY74ymO- zu^WR8?-b)qS)xc+#&MP};#uWZXjqxtS8$~83O9k&BTMF?%87MjbR|K3ytK zDO-8yV;5vhR^p`+p+(ZmL}s%bYB1U6cA4RPB%6{$xxo07C&85m{tx^g_&@M};Qzq? jf&T;l-xmM>p8x{@D(Mktb)u`N00000NkvXXu0mjf(?NUb literal 0 HcmV?d00001 diff --git a/doc/html-manual/highlight/styles/codepen-embed.css b/doc/html-manual/highlight/styles/codepen-embed.css new file mode 100644 index 00000000000..195c4a07843 --- /dev/null +++ b/doc/html-manual/highlight/styles/codepen-embed.css @@ -0,0 +1,60 @@ +/* + codepen.io Embed Theme + Author: Justin Perry + Original theme - https://github.com/chriskempson/tomorrow-theme +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #222; + color: #fff; +} + +.hljs-comment, +.hljs-quote { + color: #777; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-regexp, +.hljs-meta, +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-params, +.hljs-symbol, +.hljs-bullet, +.hljs-link, +.hljs-deletion { + color: #ab875d; +} + +.hljs-section, +.hljs-title, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-type, +.hljs-attribute { + color: #9b869b; +} + +.hljs-string, +.hljs-keyword, +.hljs-selector-tag, +.hljs-addition { + color: #8f9c6c; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/color-brewer.css b/doc/html-manual/highlight/styles/color-brewer.css new file mode 100644 index 00000000000..7934d986a7e --- /dev/null +++ b/doc/html-manual/highlight/styles/color-brewer.css @@ -0,0 +1,71 @@ +/* + +Colorbrewer theme +Original: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock +Ported by Fabrício Tavares de Oliveira + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #fff; +} + +.hljs, +.hljs-subst { + color: #000; +} + +.hljs-string, +.hljs-meta, +.hljs-symbol, +.hljs-template-tag, +.hljs-template-variable, +.hljs-addition { + color: #756bb1; +} + +.hljs-comment, +.hljs-quote { + color: #636363; +} + +.hljs-number, +.hljs-regexp, +.hljs-literal, +.hljs-bullet, +.hljs-link { + color: #31a354; +} + +.hljs-deletion, +.hljs-variable { + color: #88f; +} + + + +.hljs-keyword, +.hljs-selector-tag, +.hljs-title, +.hljs-section, +.hljs-built_in, +.hljs-doctag, +.hljs-type, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-strong { + color: #3182bd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-attribute { + color: #e6550d; +} diff --git a/doc/html-manual/highlight/styles/dark.css b/doc/html-manual/highlight/styles/dark.css new file mode 100644 index 00000000000..b4724f5f50d --- /dev/null +++ b/doc/html-manual/highlight/styles/dark.css @@ -0,0 +1,63 @@ +/* + +Dark style from softwaremaniacs.org (c) Ivan Sagalaev + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #444; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-section, +.hljs-link { + color: white; +} + +.hljs, +.hljs-subst { + color: #ddd; +} + +.hljs-string, +.hljs-title, +.hljs-name, +.hljs-type, +.hljs-attribute, +.hljs-symbol, +.hljs-bullet, +.hljs-built_in, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #d88; +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion, +.hljs-meta { + color: #777; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-title, +.hljs-section, +.hljs-doctag, +.hljs-type, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/darkula.css b/doc/html-manual/highlight/styles/darkula.css new file mode 100644 index 00000000000..c01f9a7fced --- /dev/null +++ b/doc/html-manual/highlight/styles/darkula.css @@ -0,0 +1,74 @@ +/* + +Darkula color scheme from the JetBrains family of IDEs + +*/ + + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #2b2b2b; +} + +.hljs { + color: #bababa; +} + +.hljs-strong, +.hljs-emphasis { + color: #a8a8a2; +} + +.hljs-bullet, +.hljs-quote, +.hljs-link, +.hljs-number, +.hljs-regexp, +.hljs-literal { + color: #6896ba; +} + +.hljs-code, +.hljs-selector-class { + color: #a6e22e; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-section, +.hljs-attribute, +.hljs-name, +.hljs-variable { + color: #cb7832; +} + +.hljs-params { + color: #b9b9b9; +} + +.hljs-string, +.hljs-subst, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-symbol, +.hljs-selector-id, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-template-tag, +.hljs-template-variable, +.hljs-addition { + color: #e0c46c; +} + +.hljs-comment, +.hljs-deletion, +.hljs-meta { + color: #7f7f7f; +} diff --git a/doc/html-manual/highlight/styles/default.css b/doc/html-manual/highlight/styles/default.css new file mode 100644 index 00000000000..f1bfade31e5 --- /dev/null +++ b/doc/html-manual/highlight/styles/default.css @@ -0,0 +1,99 @@ +/* + +Original highlight.js style (c) Ivan Sagalaev + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #F0F0F0; +} + + +/* Base color: saturation 0; */ + +.hljs, +.hljs-subst { + color: #444; +} + +.hljs-comment { + color: #888888; +} + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; +} + + +/* User color: hue: 0 */ + +.hljs-type, +.hljs-string, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #880000; +} + +.hljs-title, +.hljs-section { + color: #880000; + font-weight: bold; +} + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #BC6060; +} + + +/* Language color: hue: 90; */ + +.hljs-literal { + color: #78A960; +} + +.hljs-built_in, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #397300; +} + + +/* Meta color: hue: 200 */ + +.hljs-meta { + color: #1f7199; +} + +.hljs-meta-string { + color: #4d99bf; +} + + +/* Misc effects */ + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/docco.css b/doc/html-manual/highlight/styles/docco.css new file mode 100644 index 00000000000..db366be372b --- /dev/null +++ b/doc/html-manual/highlight/styles/docco.css @@ -0,0 +1,97 @@ +/* +Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars) +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #000; + background: #f8f8ff; +} + +.hljs-comment, +.hljs-quote { + color: #408080; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-subst { + color: #954121; +} + +.hljs-number { + color: #40a070; +} + +.hljs-string, +.hljs-doctag { + color: #219161; +} + +.hljs-selector-id, +.hljs-selector-class, +.hljs-section, +.hljs-type { + color: #19469d; +} + +.hljs-params { + color: #00f; +} + +.hljs-title { + color: #458; + font-weight: bold; +} + +.hljs-tag, +.hljs-name, +.hljs-attribute { + color: #000080; + font-weight: normal; +} + +.hljs-variable, +.hljs-template-variable { + color: #008080; +} + +.hljs-regexp, +.hljs-link { + color: #b68; +} + +.hljs-symbol, +.hljs-bullet { + color: #990073; +} + +.hljs-built_in, +.hljs-builtin-name { + color: #0086b3; +} + +.hljs-meta { + color: #999; + font-weight: bold; +} + +.hljs-deletion { + background: #fdd; +} + +.hljs-addition { + background: #dfd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/dracula.css b/doc/html-manual/highlight/styles/dracula.css new file mode 100644 index 00000000000..d591db6801e --- /dev/null +++ b/doc/html-manual/highlight/styles/dracula.css @@ -0,0 +1,76 @@ +/* + +Dracula Theme v1.2.0 + +https://github.com/zenorocha/dracula-theme + +Copyright 2015, All rights reserved + +Code licensed under the MIT license +http://zenorocha.mit-license.org + +@author Éverton Ribeiro +@author Zeno Rocha + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #282a36; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-section, +.hljs-link { + color: #8be9fd; +} + +.hljs-function .hljs-keyword { + color: #ff79c6; +} + +.hljs, +.hljs-subst { + color: #f8f8f2; +} + +.hljs-string, +.hljs-title, +.hljs-name, +.hljs-type, +.hljs-attribute, +.hljs-symbol, +.hljs-bullet, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #f1fa8c; +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion, +.hljs-meta { + color: #6272a4; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-title, +.hljs-section, +.hljs-doctag, +.hljs-type, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/far.css b/doc/html-manual/highlight/styles/far.css new file mode 100644 index 00000000000..2b3f87b5623 --- /dev/null +++ b/doc/html-manual/highlight/styles/far.css @@ -0,0 +1,71 @@ +/* + +FAR Style (c) MajestiC + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #000080; +} + +.hljs, +.hljs-subst { + color: #0ff; +} + +.hljs-string, +.hljs-attribute, +.hljs-symbol, +.hljs-bullet, +.hljs-built_in, +.hljs-builtin-name, +.hljs-template-tag, +.hljs-template-variable, +.hljs-addition { + color: #ff0; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-section, +.hljs-type, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-variable { + color: #fff; +} + +.hljs-comment, +.hljs-quote, +.hljs-doctag, +.hljs-deletion { + color: #888; +} + +.hljs-number, +.hljs-regexp, +.hljs-literal, +.hljs-link { + color: #0f0; +} + +.hljs-meta { + color: #008080; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-title, +.hljs-section, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/foundation.css b/doc/html-manual/highlight/styles/foundation.css new file mode 100644 index 00000000000..f1fe64b3771 --- /dev/null +++ b/doc/html-manual/highlight/styles/foundation.css @@ -0,0 +1,88 @@ +/* +Description: Foundation 4 docs style for highlight.js +Author: Dan Allen +Website: http://foundation.zurb.com/docs/ +Version: 1.0 +Date: 2013-04-02 +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #eee; color: black; +} + +.hljs-link, +.hljs-emphasis, +.hljs-attribute, +.hljs-addition { + color: #070; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong, +.hljs-string, +.hljs-deletion { + color: #d14; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-quote, +.hljs-comment { + color: #998; + font-style: italic; +} + +.hljs-section, +.hljs-title { + color: #900; +} + +.hljs-class .hljs-title, +.hljs-type { + color: #458; +} + +.hljs-variable, +.hljs-template-variable { + color: #336699; +} + +.hljs-bullet { + color: #997700; +} + +.hljs-meta { + color: #3344bb; +} + +.hljs-code, +.hljs-number, +.hljs-literal, +.hljs-keyword, +.hljs-selector-tag { + color: #099; +} + +.hljs-regexp { + background-color: #fff0ff; + color: #880088; +} + +.hljs-symbol { + color: #990073; +} + +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #007700; +} diff --git a/doc/html-manual/highlight/styles/github-gist.css b/doc/html-manual/highlight/styles/github-gist.css new file mode 100644 index 00000000000..155f0b9160d --- /dev/null +++ b/doc/html-manual/highlight/styles/github-gist.css @@ -0,0 +1,71 @@ +/** + * GitHub Gist Theme + * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro + */ + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} diff --git a/doc/html-manual/highlight/styles/github.css b/doc/html-manual/highlight/styles/github.css new file mode 100644 index 00000000000..791932b87ea --- /dev/null +++ b/doc/html-manual/highlight/styles/github.css @@ -0,0 +1,99 @@ +/* + +github.com style (c) Vasily Polovnyov + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #333; + background: #f8f8f8; +} + +.hljs-comment, +.hljs-quote { + color: #998; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-subst { + color: #333; + font-weight: bold; +} + +.hljs-number, +.hljs-literal, +.hljs-variable, +.hljs-template-variable, +.hljs-tag .hljs-attr { + color: #008080; +} + +.hljs-string, +.hljs-doctag { + color: #d14; +} + +.hljs-title, +.hljs-section, +.hljs-selector-id { + color: #900; + font-weight: bold; +} + +.hljs-subst { + font-weight: normal; +} + +.hljs-type, +.hljs-class .hljs-title { + color: #458; + font-weight: bold; +} + +.hljs-tag, +.hljs-name, +.hljs-attribute { + color: #000080; + font-weight: normal; +} + +.hljs-regexp, +.hljs-link { + color: #009926; +} + +.hljs-symbol, +.hljs-bullet { + color: #990073; +} + +.hljs-built_in, +.hljs-builtin-name { + color: #0086b3; +} + +.hljs-meta { + color: #999; + font-weight: bold; +} + +.hljs-deletion { + background: #fdd; +} + +.hljs-addition { + background: #dfd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/googlecode.css b/doc/html-manual/highlight/styles/googlecode.css new file mode 100644 index 00000000000..884ad63538e --- /dev/null +++ b/doc/html-manual/highlight/styles/googlecode.css @@ -0,0 +1,89 @@ +/* + +Google Code style (c) Aahan Krish + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: white; + color: black; +} + +.hljs-comment, +.hljs-quote { + color: #800; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-section, +.hljs-title, +.hljs-name { + color: #008; +} + +.hljs-variable, +.hljs-template-variable { + color: #660; +} + +.hljs-string, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-regexp { + color: #080; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-meta, +.hljs-number, +.hljs-link { + color: #066; +} + +.hljs-title, +.hljs-doctag, +.hljs-type, +.hljs-attr, +.hljs-built_in, +.hljs-builtin-name, +.hljs-params { + color: #606; +} + +.hljs-attribute, +.hljs-subst { + color: #000; +} + +.hljs-formula { + background-color: #eee; + font-style: italic; +} + +.hljs-selector-id, +.hljs-selector-class { + color: #9B703F +} + +.hljs-addition { + background-color: #baeeba; +} + +.hljs-deletion { + background-color: #ffc8bd; +} + +.hljs-doctag, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/grayscale.css b/doc/html-manual/highlight/styles/grayscale.css new file mode 100644 index 00000000000..5376f340648 --- /dev/null +++ b/doc/html-manual/highlight/styles/grayscale.css @@ -0,0 +1,101 @@ +/* + +grayscale style (c) MY Sun + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #333; + background: #fff; +} + +.hljs-comment, +.hljs-quote { + color: #777; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-subst { + color: #333; + font-weight: bold; +} + +.hljs-number, +.hljs-literal { + color: #777; +} + +.hljs-string, +.hljs-doctag, +.hljs-formula { + color: #333; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJ0lEQVQIW2O8e/fufwYGBgZBQUEQxcCIIfDu3Tuwivfv30NUoAsAALHpFMMLqZlPAAAAAElFTkSuQmCC) repeat; +} + +.hljs-title, +.hljs-section, +.hljs-selector-id { + color: #000; + font-weight: bold; +} + +.hljs-subst { + font-weight: normal; +} + +.hljs-class .hljs-title, +.hljs-type, +.hljs-name { + color: #333; + font-weight: bold; +} + +.hljs-tag { + color: #333; +} + +.hljs-regexp { + color: #333; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAN37979r6yszIgujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQDexSef15DBCwAAAABJRU5ErkJggg==) repeat; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link { + color: #000; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAKElEQVQIW2NkQAO7d+/+z4gsBhJwdXVlhAvCBECKwIIwAbhKZBUwBQA6hBpm5efZsgAAAABJRU5ErkJggg==) repeat; +} + +.hljs-built_in, +.hljs-builtin-name { + color: #000; + text-decoration: underline; +} + +.hljs-meta { + color: #999; + font-weight: bold; +} + +.hljs-deletion { + color: #fff; + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAE0lEQVQIW2MMDQ39zzhz5kwIAQAyxweWgUHd1AAAAABJRU5ErkJggg==) repeat; +} + +.hljs-addition { + color: #000; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYV2N89+7dfwYk8P79ewZBQUFkIQZGOiu6e/cuiptQHAPl0NtNxAQBAM97Oejj3Dg7AAAAAElFTkSuQmCC) repeat; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/gruvbox-dark.css b/doc/html-manual/highlight/styles/gruvbox-dark.css new file mode 100644 index 00000000000..f563811a862 --- /dev/null +++ b/doc/html-manual/highlight/styles/gruvbox-dark.css @@ -0,0 +1,108 @@ +/* + +Gruvbox style (dark) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox) + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #282828; +} + +.hljs, +.hljs-subst { + color: #ebdbb2; +} + +/* Gruvbox Red */ +.hljs-deletion, +.hljs-formula, +.hljs-keyword, +.hljs-link, +.hljs-selector-tag { + color: #fb4934; +} + +/* Gruvbox Blue */ +.hljs-built_in, +.hljs-emphasis, +.hljs-name, +.hljs-quote, +.hljs-strong, +.hljs-title, +.hljs-variable { + color: #83a598; +} + +/* Gruvbox Yellow */ +.hljs-attr, +.hljs-params, +.hljs-template-tag, +.hljs-type { + color: #fabd2f; +} + +/* Gruvbox Purple */ +.hljs-builtin-name, +.hljs-doctag, +.hljs-literal, +.hljs-number { + color: #8f3f71; +} + +/* Gruvbox Orange */ +.hljs-code, +.hljs-meta, +.hljs-regexp, +.hljs-selector-id, +.hljs-template-variable { + color: #fe8019; +} + +/* Gruvbox Green */ +.hljs-addition, +.hljs-meta-string, +.hljs-section, +.hljs-selector-attr, +.hljs-selector-class, +.hljs-string, +.hljs-symbol { + color: #b8bb26; +} + +/* Gruvbox Aqua */ +.hljs-attribute, +.hljs-bullet, +.hljs-class, +.hljs-function, +.hljs-function .hljs-keyword, +.hljs-meta-keyword, +.hljs-selector-pseudo, +.hljs-tag { + color: #8ec07c; +} + +/* Gruvbox Gray */ +.hljs-comment { + color: #928374; +} + +/* Gruvbox Purple */ +.hljs-link_label, +.hljs-literal, +.hljs-number { + color: #d3869b; +} + +.hljs-comment, +.hljs-emphasis { + font-style: italic; +} + +.hljs-section, +.hljs-strong, +.hljs-tag { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/gruvbox-light.css b/doc/html-manual/highlight/styles/gruvbox-light.css new file mode 100644 index 00000000000..ff45468eb2e --- /dev/null +++ b/doc/html-manual/highlight/styles/gruvbox-light.css @@ -0,0 +1,108 @@ +/* + +Gruvbox style (light) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox) + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #fbf1c7; +} + +.hljs, +.hljs-subst { + color: #3c3836; +} + +/* Gruvbox Red */ +.hljs-deletion, +.hljs-formula, +.hljs-keyword, +.hljs-link, +.hljs-selector-tag { + color: #9d0006; +} + +/* Gruvbox Blue */ +.hljs-built_in, +.hljs-emphasis, +.hljs-name, +.hljs-quote, +.hljs-strong, +.hljs-title, +.hljs-variable { + color: #076678; +} + +/* Gruvbox Yellow */ +.hljs-attr, +.hljs-params, +.hljs-template-tag, +.hljs-type { + color: #b57614; +} + +/* Gruvbox Purple */ +.hljs-builtin-name, +.hljs-doctag, +.hljs-literal, +.hljs-number { + color: #8f3f71; +} + +/* Gruvbox Orange */ +.hljs-code, +.hljs-meta, +.hljs-regexp, +.hljs-selector-id, +.hljs-template-variable { + color: #af3a03; +} + +/* Gruvbox Green */ +.hljs-addition, +.hljs-meta-string, +.hljs-section, +.hljs-selector-attr, +.hljs-selector-class, +.hljs-string, +.hljs-symbol { + color: #79740e; +} + +/* Gruvbox Aqua */ +.hljs-attribute, +.hljs-bullet, +.hljs-class, +.hljs-function, +.hljs-function .hljs-keyword, +.hljs-meta-keyword, +.hljs-selector-pseudo, +.hljs-tag { + color: #427b58; +} + +/* Gruvbox Gray */ +.hljs-comment { + color: #928374; +} + +/* Gruvbox Purple */ +.hljs-link_label, +.hljs-literal, +.hljs-number { + color: #8f3f71; +} + +.hljs-comment, +.hljs-emphasis { + font-style: italic; +} + +.hljs-section, +.hljs-strong, +.hljs-tag { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/hopscotch.css b/doc/html-manual/highlight/styles/hopscotch.css new file mode 100644 index 00000000000..32e60d230a5 --- /dev/null +++ b/doc/html-manual/highlight/styles/hopscotch.css @@ -0,0 +1,83 @@ +/* + * Hopscotch + * by Jan T. Sott + * https://github.com/idleberg/Hopscotch + * + * This work is licensed under the Creative Commons CC0 1.0 Universal License + */ + +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #989498; +} + +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-link, +.hljs-deletion { + color: #dd464c; +} + +/* Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #fd8b19; +} + +/* Yellow */ +.hljs-class .hljs-title { + color: #fdcc59; +} + +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #8fc13e; +} + +/* Aqua */ +.hljs-meta { + color: #149b93; +} + +/* Blue */ +.hljs-function, +.hljs-section, +.hljs-title { + color: #1290bf; +} + +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #c85e7c; +} + +.hljs { + display: block; + background: #322931; + color: #b9b5b8; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/hybrid.css b/doc/html-manual/highlight/styles/hybrid.css new file mode 100644 index 00000000000..29735a18904 --- /dev/null +++ b/doc/html-manual/highlight/styles/hybrid.css @@ -0,0 +1,102 @@ +/* + +vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid) + +*/ + +/*background color*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #1d1f21; +} + +/*selection color*/ +.hljs::selection, +.hljs span::selection { + background: #373b41; +} + +.hljs::-moz-selection, +.hljs span::-moz-selection { + background: #373b41; +} + +/*foreground color*/ +.hljs { + color: #c5c8c6; +} + +/*color: fg_yellow*/ +.hljs-title, +.hljs-name { + color: #f0c674; +} + +/*color: fg_comment*/ +.hljs-comment, +.hljs-meta, +.hljs-meta .hljs-keyword { + color: #707880; +} + +/*color: fg_red*/ +.hljs-number, +.hljs-symbol, +.hljs-literal, +.hljs-deletion, +.hljs-link { + color: #cc6666 +} + +/*color: fg_green*/ +.hljs-string, +.hljs-doctag, +.hljs-addition, +.hljs-regexp, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #b5bd68; +} + +/*color: fg_purple*/ +.hljs-attribute, +.hljs-code, +.hljs-selector-id { + color: #b294bb; +} + +/*color: fg_blue*/ +.hljs-keyword, +.hljs-selector-tag, +.hljs-bullet, +.hljs-tag { + color: #81a2be; +} + +/*color: fg_aqua*/ +.hljs-subst, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #8abeb7; +} + +/*color: fg_orange*/ +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-quote, +.hljs-section, +.hljs-selector-class { + color: #de935f; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/idea.css b/doc/html-manual/highlight/styles/idea.css new file mode 100644 index 00000000000..3bf1892bd4a --- /dev/null +++ b/doc/html-manual/highlight/styles/idea.css @@ -0,0 +1,97 @@ +/* + +Intellij Idea-like styling (c) Vasily Polovnyov + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #000; + background: #fff; +} + +.hljs-subst, +.hljs-title { + font-weight: normal; + color: #000; +} + +.hljs-comment, +.hljs-quote { + color: #808080; + font-style: italic; +} + +.hljs-meta { + color: #808000; +} + +.hljs-tag { + background: #efefef; +} + +.hljs-section, +.hljs-name, +.hljs-literal, +.hljs-keyword, +.hljs-selector-tag, +.hljs-type, +.hljs-selector-id, +.hljs-selector-class { + font-weight: bold; + color: #000080; +} + +.hljs-attribute, +.hljs-number, +.hljs-regexp, +.hljs-link { + font-weight: bold; + color: #0000ff; +} + +.hljs-number, +.hljs-regexp, +.hljs-link { + font-weight: normal; +} + +.hljs-string { + color: #008000; + font-weight: bold; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-formula { + color: #000; + background: #d0eded; + font-style: italic; +} + +.hljs-doctag { + text-decoration: underline; +} + +.hljs-variable, +.hljs-template-variable { + color: #660e7a; +} + +.hljs-addition { + background: #baeeba; +} + +.hljs-deletion { + background: #ffc8bd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/ir-black.css b/doc/html-manual/highlight/styles/ir-black.css new file mode 100644 index 00000000000..bd4c755ed8a --- /dev/null +++ b/doc/html-manual/highlight/styles/ir-black.css @@ -0,0 +1,73 @@ +/* + IR_Black style (c) Vasily Mikhailitchenko +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #000; + color: #f8f8f8; +} + +.hljs-comment, +.hljs-quote, +.hljs-meta { + color: #7c7c7c; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-tag, +.hljs-name { + color: #96cbfe; +} + +.hljs-attribute, +.hljs-selector-id { + color: #ffffb6; +} + +.hljs-string, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-addition { + color: #a8ff60; +} + +.hljs-subst { + color: #daefa3; +} + +.hljs-regexp, +.hljs-link { + color: #e9c062; +} + +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-doctag { + color: #ffffb6; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-variable, +.hljs-template-variable, +.hljs-literal { + color: #c6c5fe; +} + +.hljs-number, +.hljs-deletion { + color:#ff73fd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/kimbie.dark.css b/doc/html-manual/highlight/styles/kimbie.dark.css new file mode 100644 index 00000000000..d139cb5d0c9 --- /dev/null +++ b/doc/html-manual/highlight/styles/kimbie.dark.css @@ -0,0 +1,74 @@ +/* + Name: Kimbie (dark) + Author: Jan T. Sott + License: Creative Commons Attribution-ShareAlike 4.0 Unported License + URL: https://github.com/idleberg/Kimbie-highlight.js +*/ + +/* Kimbie Comment */ +.hljs-comment, +.hljs-quote { + color: #d6baad; +} + +/* Kimbie Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-meta { + color: #dc3958; +} + +/* Kimbie Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-deletion, +.hljs-link { + color: #f79a32; +} + +/* Kimbie Yellow */ +.hljs-title, +.hljs-section, +.hljs-attribute { + color: #f06431; +} + +/* Kimbie Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #889b4a; +} + +/* Kimbie Purple */ +.hljs-keyword, +.hljs-selector-tag, +.hljs-function { + color: #98676a; +} + +.hljs { + display: block; + overflow-x: auto; + background: #221a0f; + color: #d3af86; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/kimbie.light.css b/doc/html-manual/highlight/styles/kimbie.light.css new file mode 100644 index 00000000000..04ff6ed3a2d --- /dev/null +++ b/doc/html-manual/highlight/styles/kimbie.light.css @@ -0,0 +1,74 @@ +/* + Name: Kimbie (light) + Author: Jan T. Sott + License: Creative Commons Attribution-ShareAlike 4.0 Unported License + URL: https://github.com/idleberg/Kimbie-highlight.js +*/ + +/* Kimbie Comment */ +.hljs-comment, +.hljs-quote { + color: #a57a4c; +} + +/* Kimbie Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-meta { + color: #dc3958; +} + +/* Kimbie Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-deletion, +.hljs-link { + color: #f79a32; +} + +/* Kimbie Yellow */ +.hljs-title, +.hljs-section, +.hljs-attribute { + color: #f06431; +} + +/* Kimbie Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #889b4a; +} + +/* Kimbie Purple */ +.hljs-keyword, +.hljs-selector-tag, +.hljs-function { + color: #98676a; +} + +.hljs { + display: block; + overflow-x: auto; + background: #fbebd4; + color: #84613d; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/magula.css b/doc/html-manual/highlight/styles/magula.css new file mode 100644 index 00000000000..44dee5e8e10 --- /dev/null +++ b/doc/html-manual/highlight/styles/magula.css @@ -0,0 +1,70 @@ +/* +Description: Magula style for highligh.js +Author: Ruslan Keba +Website: http://rukeba.com/ +Version: 1.0 +Date: 2009-01-03 +Music: Aphex Twin / Xtal +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background-color: #f4f4f4; +} + +.hljs, +.hljs-subst { + color: black; +} + +.hljs-string, +.hljs-title, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #050; +} + +.hljs-comment, +.hljs-quote { + color: #777; +} + +.hljs-number, +.hljs-regexp, +.hljs-literal, +.hljs-type, +.hljs-link { + color: #800; +} + +.hljs-deletion, +.hljs-meta { + color: #00e; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-doctag, +.hljs-title, +.hljs-section, +.hljs-built_in, +.hljs-tag, +.hljs-name { + font-weight: bold; + color: navy; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/mono-blue.css b/doc/html-manual/highlight/styles/mono-blue.css new file mode 100644 index 00000000000..884c97c7673 --- /dev/null +++ b/doc/html-manual/highlight/styles/mono-blue.css @@ -0,0 +1,59 @@ +/* + Five-color theme from a single blue hue. +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #eaeef3; +} + +.hljs { + color: #00193a; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-title, +.hljs-section, +.hljs-doctag, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-comment { + color: #738191; +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-built_in, +.hljs-literal, +.hljs-type, +.hljs-addition, +.hljs-tag, +.hljs-quote, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #0048ab; +} + +.hljs-meta, +.hljs-subst, +.hljs-symbol, +.hljs-regexp, +.hljs-attribute, +.hljs-deletion, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-bullet { + color: #4c81c9; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/monokai-sublime.css b/doc/html-manual/highlight/styles/monokai-sublime.css new file mode 100644 index 00000000000..2864170daf6 --- /dev/null +++ b/doc/html-manual/highlight/styles/monokai-sublime.css @@ -0,0 +1,83 @@ +/* + +Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/ + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #23241f; +} + +.hljs, +.hljs-tag, +.hljs-subst { + color: #f8f8f2; +} + +.hljs-strong, +.hljs-emphasis { + color: #a8a8a2; +} + +.hljs-bullet, +.hljs-quote, +.hljs-number, +.hljs-regexp, +.hljs-literal, +.hljs-link { + color: #ae81ff; +} + +.hljs-code, +.hljs-title, +.hljs-section, +.hljs-selector-class { + color: #a6e22e; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-name, +.hljs-attr { + color: #f92672; +} + +.hljs-symbol, +.hljs-attribute { + color: #66d9ef; +} + +.hljs-params, +.hljs-class .hljs-title { + color: #f8f8f2; +} + +.hljs-string, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-selector-id, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-addition, +.hljs-variable, +.hljs-template-variable { + color: #e6db74; +} + +.hljs-comment, +.hljs-deletion, +.hljs-meta { + color: #75715e; +} diff --git a/doc/html-manual/highlight/styles/monokai.css b/doc/html-manual/highlight/styles/monokai.css new file mode 100644 index 00000000000..775d53f91aa --- /dev/null +++ b/doc/html-manual/highlight/styles/monokai.css @@ -0,0 +1,70 @@ +/* +Monokai style - ported by Luigi Maselli - http://grigio.org +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #272822; color: #ddd; +} + +.hljs-tag, +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-strong, +.hljs-name { + color: #f92672; +} + +.hljs-code { + color: #66d9ef; +} + +.hljs-class .hljs-title { + color: white; +} + +.hljs-attribute, +.hljs-symbol, +.hljs-regexp, +.hljs-link { + color: #bf79db; +} + +.hljs-string, +.hljs-bullet, +.hljs-subst, +.hljs-title, +.hljs-section, +.hljs-emphasis, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #a6e22e; +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion, +.hljs-meta { + color: #75715e; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-doctag, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-selector-id { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/obsidian.css b/doc/html-manual/highlight/styles/obsidian.css new file mode 100644 index 00000000000..356630fa234 --- /dev/null +++ b/doc/html-manual/highlight/styles/obsidian.css @@ -0,0 +1,88 @@ +/** + * Obsidian style + * ported by Alexander Marenin (http://github.com/ioncreature) + */ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #282b2e; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-selector-id { + color: #93c763; +} + +.hljs-number { + color: #ffcd22; +} + +.hljs { + color: #e0e2e4; +} + +.hljs-attribute { + color: #668bb0; +} + +.hljs-code, +.hljs-class .hljs-title, +.hljs-section { + color: white; +} + +.hljs-regexp, +.hljs-link { + color: #d39745; +} + +.hljs-meta { + color: #557182; +} + +.hljs-tag, +.hljs-name, +.hljs-bullet, +.hljs-subst, +.hljs-emphasis, +.hljs-type, +.hljs-built_in, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable { + color: #8cbbad; +} + +.hljs-string, +.hljs-symbol { + color: #ec7600; +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion { + color: #818e96; +} + +.hljs-selector-class { + color: #A082BD +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-doctag, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-name, +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/paraiso-dark.css b/doc/html-manual/highlight/styles/paraiso-dark.css new file mode 100644 index 00000000000..e7292401c6e --- /dev/null +++ b/doc/html-manual/highlight/styles/paraiso-dark.css @@ -0,0 +1,72 @@ +/* + Paraíso (dark) + Created by Jan T. Sott (http://github.com/idleberg) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) +*/ + +/* Paraíso Comment */ +.hljs-comment, +.hljs-quote { + color: #8d8687; +} + +/* Paraíso Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-link, +.hljs-meta { + color: #ef6155; +} + +/* Paraíso Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-deletion { + color: #f99b15; +} + +/* Paraíso Yellow */ +.hljs-title, +.hljs-section, +.hljs-attribute { + color: #fec418; +} + +/* Paraíso Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #48b685; +} + +/* Paraíso Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #815ba4; +} + +.hljs { + display: block; + overflow-x: auto; + background: #2f1e2e; + color: #a39e9b; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/paraiso-light.css b/doc/html-manual/highlight/styles/paraiso-light.css new file mode 100644 index 00000000000..944857cd8d3 --- /dev/null +++ b/doc/html-manual/highlight/styles/paraiso-light.css @@ -0,0 +1,72 @@ +/* + Paraíso (light) + Created by Jan T. Sott (http://github.com/idleberg) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) +*/ + +/* Paraíso Comment */ +.hljs-comment, +.hljs-quote { + color: #776e71; +} + +/* Paraíso Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-link, +.hljs-meta { + color: #ef6155; +} + +/* Paraíso Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-deletion { + color: #f99b15; +} + +/* Paraíso Yellow */ +.hljs-title, +.hljs-section, +.hljs-attribute { + color: #fec418; +} + +/* Paraíso Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #48b685; +} + +/* Paraíso Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #815ba4; +} + +.hljs { + display: block; + overflow-x: auto; + background: #e7e9db; + color: #4f424c; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/pojoaque.css b/doc/html-manual/highlight/styles/pojoaque.css new file mode 100644 index 00000000000..2e07847b2b2 --- /dev/null +++ b/doc/html-manual/highlight/styles/pojoaque.css @@ -0,0 +1,83 @@ +/* + +Pojoaque Style by Jason Tate +http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html +Based on Solarized Style from http://ethanschoonover.com/solarized + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #dccf8f; + background: url(./pojoaque.jpg) repeat scroll left top #181914; +} + +.hljs-comment, +.hljs-quote { + color: #586e75; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-addition { + color: #b64926; +} + +.hljs-number, +.hljs-string, +.hljs-doctag, +.hljs-regexp { + color: #468966; +} + +.hljs-title, +.hljs-section, +.hljs-built_in, +.hljs-name { + color: #ffb03b; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-class .hljs-title, +.hljs-type, +.hljs-tag { + color: #b58900; +} + +.hljs-attribute { + color: #b89859; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link, +.hljs-subst, +.hljs-meta { + color: #cb4b16; +} + +.hljs-deletion { + color: #dc322f; +} + +.hljs-selector-id, +.hljs-selector-class { + color: #d3a60c; +} + +.hljs-formula { + background: #073642; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/pojoaque.jpg b/doc/html-manual/highlight/styles/pojoaque.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c07d4ab40b6d77e90ff69f0012bcd33b21d31c3 GIT binary patch literal 1186 zcmZXSe^8Tk9LK-kXFs3)f@f?)Cddzw3v4wdZyXQ;4x3=;Ja*N#%n9ik!UGmt9H3k0 zJST|5jOc(ID$FQt3C?jQZBws#kXolO1lg9Pba9BB=Q+UEBX!nY@6Uhl&+ofe$Q$y5 z@ci`~)&qzDP(lOiQ5p?p z(`j^e7!yUAVHk%K#^GQXn?s0=VLYCI$HRoe=xCuZ>A6A3@sxEP#XqNFpIb=0)KQ#Nss_tD17;m4@$JKL;LR|K|QF3f%!L5+s(9Ft8SQ zG|~pGpEGFW5Z|OA)-O@mNHy-g@7m8JTf?kl@vUKBGmw)Y*9sDRNr3PN!IKefWaydTe1D zjzpyzPnD3}hBNaS4aFX7=0&~I*Hu7#4au@qVBglH#-m;QFOx_`=j z{EqRY#Eh*yoWP^pa4H>8GH{rO?!_+xwL0(k4yL^D%^nBkJ*UI;Lx;ped8d|f*S_s@ z3~ilcRC(&NT#9Gn#UD;o^EYSMXDMf%XcUi3>;WXXD-QX3P9wMyP7eA&RS{)h5{??W3^Rq=goFJ>?lA~J- zdYe>!xvYLW*fPT0RK7wsJRg^?x#W1*GP9_f`6t>QD_X>0d!owyN>nO2?U5}|3?hX_UZYT@^>S!9eB~bZ9U`q;`U)@L670o1g z`Hd}h<_WRvUc|n*%v4Hbb-4tJD40iyF^q%g*&!6>hkYDvi-{Uc4yTM zzcthN4Z{ka!+F_KzYV#yWi;c^X^q6g`pD8cp?$Kl?hCz0s^a|mH%P!CF%*<6k^~i` zT5Mi-t5-frUcHkk^Qh}+N)Kz1&Bi95`oNc|quI>tUi~BY>xcF9(%tv2i{G6kE9*q~ qCoAGl20`)w0rdgp9H%Q=M5|p`hOhFz6$I%Y&ncY8>c?7PXyh+SL&XXJ literal 0 HcmV?d00001 diff --git a/doc/html-manual/highlight/styles/purebasic.css b/doc/html-manual/highlight/styles/purebasic.css new file mode 100644 index 00000000000..5ce9b9e0710 --- /dev/null +++ b/doc/html-manual/highlight/styles/purebasic.css @@ -0,0 +1,96 @@ +/* + +PureBASIC native IDE style ( version 1.0 - April 2016 ) + +by Tristano Ajmone + +Public Domain + +NOTE_1: PureBASIC code syntax highlighting only applies the following classes: + .hljs-comment + .hljs-function + .hljs-keywords + .hljs-string + .hljs-symbol + + Other classes are added here for the benefit of styling other languages with the look and feel of PureBASIC native IDE style. + If you need to customize a stylesheet for PureBASIC only, remove all non-relevant classes -- PureBASIC-related classes are followed by + a "--- used for PureBASIC ... ---" comment on same line. + +NOTE_2: Color names provided in comments were derived using "Name that Color" online tool: + http://chir.ag/projects/name-that-color +*/ + +.hljs { /* Common set of rules required by highlight.js (don'r remove!) */ + display: block; + overflow-x: auto; + padding: 0.5em; + background: #FFFFDF; /* Half and Half (approx.) */ +/* --- Uncomment to add PureBASIC native IDE styled font! + font-family: Consolas; +*/ +} + +.hljs, /* --- used for PureBASIC base color --- */ +.hljs-type, /* --- used for PureBASIC Procedures return type --- */ +.hljs-function, /* --- used for wrapping PureBASIC Procedures definitions --- */ +.hljs-name, +.hljs-number, +.hljs-attr, +.hljs-params, +.hljs-subst { + color: #000000; /* Black */ +} + +.hljs-comment, /* --- used for PureBASIC Comments --- */ +.hljs-regexp, +.hljs-section, +.hljs-selector-pseudo, +.hljs-addition { + color: #00AAAA; /* Persian Green (approx.) */ +} + +.hljs-title, /* --- used for PureBASIC Procedures Names --- */ +.hljs-tag, +.hljs-variable, +.hljs-code { + color: #006666; /* Blue Stone (approx.) */ +} + +.hljs-keyword, /* --- used for PureBASIC Keywords --- */ +.hljs-class, +.hljs-meta-keyword, +.hljs-selector-class, +.hljs-built_in, +.hljs-builtin-name { + color: #006666; /* Blue Stone (approx.) */ + font-weight: bold; +} + +.hljs-string, /* --- used for PureBASIC Strings --- */ +.hljs-selector-attr { + color: #0080FF; /* Azure Radiance (approx.) */ +} + +.hljs-symbol, /* --- used for PureBASIC Constants --- */ +.hljs-link, +.hljs-deletion, +.hljs-attribute { + color: #924B72; /* Cannon Pink (approx.) */ +} + +.hljs-meta, +.hljs-literal, +.hljs-selector-id { + color: #924B72; /* Cannon Pink (approx.) */ + font-weight: bold; +} + +.hljs-strong, +.hljs-name { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/qtcreator_dark.css b/doc/html-manual/highlight/styles/qtcreator_dark.css new file mode 100644 index 00000000000..7aa56a3655f --- /dev/null +++ b/doc/html-manual/highlight/styles/qtcreator_dark.css @@ -0,0 +1,83 @@ +/* + +Qt Creator dark color scheme + +*/ + + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #000000; +} + +.hljs, +.hljs-subst, +.hljs-tag, +.hljs-title { + color: #aaaaaa; +} + +.hljs-strong, +.hljs-emphasis { + color: #a8a8a2; +} + +.hljs-bullet, +.hljs-quote, +.hljs-number, +.hljs-regexp, +.hljs-literal { + color: #ff55ff; +} + +.hljs-code +.hljs-selector-class { + color: #aaaaff; +} + +.hljs-emphasis, +.hljs-stronge, +.hljs-type { + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-function, +.hljs-section, +.hljs-symbol, +.hljs-name { + color: #ffff55; +} + +.hljs-attribute { + color: #ff5555; +} + +.hljs-variable, +.hljs-params, +.hljs-class .hljs-title { + color: #8888ff; +} + +.hljs-string, +.hljs-selector-id, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-template-tag, +.hljs-template-variable, +.hljs-addition, +.hljs-link { + color: #ff55ff; +} + +.hljs-comment, +.hljs-meta, +.hljs-deletion { + color: #55ffff; +} diff --git a/doc/html-manual/highlight/styles/qtcreator_light.css b/doc/html-manual/highlight/styles/qtcreator_light.css new file mode 100644 index 00000000000..1efa2c660f0 --- /dev/null +++ b/doc/html-manual/highlight/styles/qtcreator_light.css @@ -0,0 +1,83 @@ +/* + +Qt Creator light color scheme + +*/ + + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #ffffff; +} + +.hljs, +.hljs-subst, +.hljs-tag, +.hljs-title { + color: #000000; +} + +.hljs-strong, +.hljs-emphasis { + color: #000000; +} + +.hljs-bullet, +.hljs-quote, +.hljs-number, +.hljs-regexp, +.hljs-literal { + color: #000080; +} + +.hljs-code +.hljs-selector-class { + color: #800080; +} + +.hljs-emphasis, +.hljs-stronge, +.hljs-type { + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-function, +.hljs-section, +.hljs-symbol, +.hljs-name { + color: #808000; +} + +.hljs-attribute { + color: #800000; +} + +.hljs-variable, +.hljs-params, +.hljs-class .hljs-title { + color: #0055AF; +} + +.hljs-string, +.hljs-selector-id, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-template-tag, +.hljs-template-variable, +.hljs-addition, +.hljs-link { + color: #008000; +} + +.hljs-comment, +.hljs-meta, +.hljs-deletion { + color: #008000; +} diff --git a/doc/html-manual/highlight/styles/railscasts.css b/doc/html-manual/highlight/styles/railscasts.css new file mode 100644 index 00000000000..008cdc5bf14 --- /dev/null +++ b/doc/html-manual/highlight/styles/railscasts.css @@ -0,0 +1,106 @@ +/* + +Railscasts-like style (c) Visoft, Inc. (Damien White) + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #232323; + color: #e6e1dc; +} + +.hljs-comment, +.hljs-quote { + color: #bc9458; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag { + color: #c26230; +} + +.hljs-string, +.hljs-number, +.hljs-regexp, +.hljs-variable, +.hljs-template-variable { + color: #a5c261; +} + +.hljs-subst { + color: #519f50; +} + +.hljs-tag, +.hljs-name { + color: #e8bf6a; +} + +.hljs-type { + color: #da4939; +} + + +.hljs-symbol, +.hljs-bullet, +.hljs-built_in, +.hljs-builtin-name, +.hljs-attr, +.hljs-link { + color: #6d9cbe; +} + +.hljs-params { + color: #d0d0ff; +} + +.hljs-attribute { + color: #cda869; +} + +.hljs-meta { + color: #9b859d; +} + +.hljs-title, +.hljs-section { + color: #ffc66d; +} + +.hljs-addition { + background-color: #144212; + color: #e6e1dc; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #600; + color: #e6e1dc; + display: inline-block; + width: 100%; +} + +.hljs-selector-class { + color: #9b703f; +} + +.hljs-selector-id { + color: #8b98ab; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-link { + text-decoration: underline; +} diff --git a/doc/html-manual/highlight/styles/rainbow.css b/doc/html-manual/highlight/styles/rainbow.css new file mode 100644 index 00000000000..905eb8ef187 --- /dev/null +++ b/doc/html-manual/highlight/styles/rainbow.css @@ -0,0 +1,85 @@ +/* + +Style with support for rainbow parens + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #474949; + color: #d1d9e1; +} + + +.hljs-comment, +.hljs-quote { + color: #969896; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-type, +.hljs-addition { + color: #cc99cc; +} + +.hljs-number, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #f99157; +} + +.hljs-string, +.hljs-doctag, +.hljs-regexp { + color: #8abeb7; +} + +.hljs-title, +.hljs-name, +.hljs-section, +.hljs-built_in { + color: #b5bd68; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-selector-id, +.hljs-class .hljs-title { + color: #ffcc66; +} + +.hljs-section, +.hljs-name, +.hljs-strong { + font-weight: bold; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-subst, +.hljs-meta, +.hljs-link { + color: #f99157; +} + +.hljs-deletion { + color: #dc322f; +} + +.hljs-formula { + background: #eee8d5; +} + +.hljs-attr, +.hljs-attribute { + color: #81a2be; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/school-book.css b/doc/html-manual/highlight/styles/school-book.css new file mode 100644 index 00000000000..964b51d8414 --- /dev/null +++ b/doc/html-manual/highlight/styles/school-book.css @@ -0,0 +1,72 @@ +/* + +School Book style from goldblog.com.ua (c) Zaripov Yura + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 15px 0.5em 0.5em 30px; + font-size: 11px; + line-height:16px; +} + +pre{ + background:#f6f6ae url(./school-book.png); + border-top: solid 2px #d2e8b9; + border-bottom: solid 1px #d2e8b9; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal { + color:#005599; + font-weight:bold; +} + +.hljs, +.hljs-subst { + color: #3e5915; +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute, +.hljs-built_in, +.hljs-builtin-name, +.hljs-addition, +.hljs-variable, +.hljs-template-tag, +.hljs-template-variable, +.hljs-link { + color: #2c009f; +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion, +.hljs-meta { + color: #e60415; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal, +.hljs-doctag, +.hljs-title, +.hljs-section, +.hljs-type, +.hljs-name, +.hljs-selector-id, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/school-book.png b/doc/html-manual/highlight/styles/school-book.png new file mode 100644 index 0000000000000000000000000000000000000000..956e9790a0e2c079b3d568348ff3accd1d9cac30 GIT binary patch literal 486 zcmeAS@N?(olHy`uVBq!ia0y~yV7?7x3vjRjNjAS6Ga$v1?&#~tz_9*=IcwKTAYZb? zHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkD0|R4)r;B4q#jQ7Ycl#YS5MfK$ z?b^fh#qmaEhFDxvyThwfhdfkOPApt1lr{NA;Vr%uzxJuVIyzm(ed_8_-0$LLU})H&o5Re&aDemE>EG#(|F^t9_pa-H z_Mf?rMVrs}-M?S|?ZdY@c6s41zy8~}@a{v&#Ea7V)wJ$+#K|u$5UvWCdFLwGac}6w{_s*=8A6L7Rfc|9gboFyt I=akR{0OLZ+qyPW_ literal 0 HcmV?d00001 diff --git a/doc/html-manual/highlight/styles/solarized-dark.css b/doc/html-manual/highlight/styles/solarized-dark.css new file mode 100644 index 00000000000..b4c0da1f786 --- /dev/null +++ b/doc/html-manual/highlight/styles/solarized-dark.css @@ -0,0 +1,84 @@ +/* + +Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #002b36; + color: #839496; +} + +.hljs-comment, +.hljs-quote { + color: #586e75; +} + +/* Solarized Green */ +.hljs-keyword, +.hljs-selector-tag, +.hljs-addition { + color: #859900; +} + +/* Solarized Cyan */ +.hljs-number, +.hljs-string, +.hljs-meta .hljs-meta-string, +.hljs-literal, +.hljs-doctag, +.hljs-regexp { + color: #2aa198; +} + +/* Solarized Blue */ +.hljs-title, +.hljs-section, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #268bd2; +} + +/* Solarized Yellow */ +.hljs-attribute, +.hljs-attr, +.hljs-variable, +.hljs-template-variable, +.hljs-class .hljs-title, +.hljs-type { + color: #b58900; +} + +/* Solarized Orange */ +.hljs-symbol, +.hljs-bullet, +.hljs-subst, +.hljs-meta, +.hljs-meta .hljs-keyword, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-link { + color: #cb4b16; +} + +/* Solarized Red */ +.hljs-built_in, +.hljs-deletion { + color: #dc322f; +} + +.hljs-formula { + background: #073642; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/solarized-light.css b/doc/html-manual/highlight/styles/solarized-light.css new file mode 100644 index 00000000000..fdcfcc72c45 --- /dev/null +++ b/doc/html-manual/highlight/styles/solarized-light.css @@ -0,0 +1,84 @@ +/* + +Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #fdf6e3; + color: #657b83; +} + +.hljs-comment, +.hljs-quote { + color: #93a1a1; +} + +/* Solarized Green */ +.hljs-keyword, +.hljs-selector-tag, +.hljs-addition { + color: #859900; +} + +/* Solarized Cyan */ +.hljs-number, +.hljs-string, +.hljs-meta .hljs-meta-string, +.hljs-literal, +.hljs-doctag, +.hljs-regexp { + color: #2aa198; +} + +/* Solarized Blue */ +.hljs-title, +.hljs-section, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #268bd2; +} + +/* Solarized Yellow */ +.hljs-attribute, +.hljs-attr, +.hljs-variable, +.hljs-template-variable, +.hljs-class .hljs-title, +.hljs-type { + color: #b58900; +} + +/* Solarized Orange */ +.hljs-symbol, +.hljs-bullet, +.hljs-subst, +.hljs-meta, +.hljs-meta .hljs-keyword, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-link { + color: #cb4b16; +} + +/* Solarized Red */ +.hljs-built_in, +.hljs-deletion { + color: #dc322f; +} + +.hljs-formula { + background: #eee8d5; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/sunburst.css b/doc/html-manual/highlight/styles/sunburst.css new file mode 100644 index 00000000000..f56dd5e9b61 --- /dev/null +++ b/doc/html-manual/highlight/styles/sunburst.css @@ -0,0 +1,102 @@ +/* + +Sunburst-like style (c) Vasily Polovnyov + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #000; + color: #f8f8f8; +} + +.hljs-comment, +.hljs-quote { + color: #aeaeae; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #e28964; +} + +.hljs-string { + color: #65b042; +} + +.hljs-subst { + color: #daefa3; +} + +.hljs-regexp, +.hljs-link { + color: #e9c062; +} + +.hljs-title, +.hljs-section, +.hljs-tag, +.hljs-name { + color: #89bdff; +} + +.hljs-class .hljs-title, +.hljs-doctag { + text-decoration: underline; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-number { + color: #3387cc; +} + +.hljs-params, +.hljs-variable, +.hljs-template-variable { + color: #3e87e3; +} + +.hljs-attribute { + color: #cda869; +} + +.hljs-meta { + color: #8996a8; +} + +.hljs-formula { + background-color: #0e2231; + color: #f8f8f8; + font-style: italic; +} + +.hljs-addition { + background-color: #253b22; + color: #f8f8f8; +} + +.hljs-deletion { + background-color: #420e09; + color: #f8f8f8; +} + +.hljs-selector-class { + color: #9b703f; +} + +.hljs-selector-id { + color: #8b98ab; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/tomorrow-night-blue.css b/doc/html-manual/highlight/styles/tomorrow-night-blue.css new file mode 100644 index 00000000000..78e59cc8cb0 --- /dev/null +++ b/doc/html-manual/highlight/styles/tomorrow-night-blue.css @@ -0,0 +1,75 @@ +/* Tomorrow Night Blue Theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment, +.hljs-quote { + color: #7285b7; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #ff9da4; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #ffc58f; +} + +/* Tomorrow Yellow */ +.hljs-attribute { + color: #ffeead; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #d1f1a9; +} + +/* Tomorrow Blue */ +.hljs-title, +.hljs-section { + color: #bbdaff; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #ebbbff; +} + +.hljs { + display: block; + overflow-x: auto; + background: #002451; + color: white; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/tomorrow-night-bright.css b/doc/html-manual/highlight/styles/tomorrow-night-bright.css new file mode 100644 index 00000000000..e05af8ae245 --- /dev/null +++ b/doc/html-manual/highlight/styles/tomorrow-night-bright.css @@ -0,0 +1,74 @@ +/* Tomorrow Night Bright Theme */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment, +.hljs-quote { + color: #969896; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #d54e53; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #e78c45; +} + +/* Tomorrow Yellow */ +.hljs-attribute { + color: #e7c547; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #b9ca4a; +} + +/* Tomorrow Blue */ +.hljs-title, +.hljs-section { + color: #7aa6da; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #c397d8; +} + +.hljs { + display: block; + overflow-x: auto; + background: black; + color: #eaeaea; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/tomorrow-night-eighties.css b/doc/html-manual/highlight/styles/tomorrow-night-eighties.css new file mode 100644 index 00000000000..08fd51c742a --- /dev/null +++ b/doc/html-manual/highlight/styles/tomorrow-night-eighties.css @@ -0,0 +1,74 @@ +/* Tomorrow Night Eighties Theme */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment, +.hljs-quote { + color: #999999; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #f2777a; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #f99157; +} + +/* Tomorrow Yellow */ +.hljs-attribute { + color: #ffcc66; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #99cc99; +} + +/* Tomorrow Blue */ +.hljs-title, +.hljs-section { + color: #6699cc; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #cc99cc; +} + +.hljs { + display: block; + overflow-x: auto; + background: #2d2d2d; + color: #cccccc; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/tomorrow-night.css b/doc/html-manual/highlight/styles/tomorrow-night.css new file mode 100644 index 00000000000..ddd270a4e76 --- /dev/null +++ b/doc/html-manual/highlight/styles/tomorrow-night.css @@ -0,0 +1,75 @@ +/* Tomorrow Night Theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment, +.hljs-quote { + color: #969896; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #cc6666; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #de935f; +} + +/* Tomorrow Yellow */ +.hljs-attribute { + color: #f0c674; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #b5bd68; +} + +/* Tomorrow Blue */ +.hljs-title, +.hljs-section { + color: #81a2be; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #b294bb; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1d1f21; + color: #c5c8c6; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/tomorrow.css b/doc/html-manual/highlight/styles/tomorrow.css new file mode 100644 index 00000000000..026a62fe3be --- /dev/null +++ b/doc/html-manual/highlight/styles/tomorrow.css @@ -0,0 +1,72 @@ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment, +.hljs-quote { + color: #8e908c; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #c82829; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #f5871f; +} + +/* Tomorrow Yellow */ +.hljs-attribute { + color: #eab700; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #718c00; +} + +/* Tomorrow Blue */ +.hljs-title, +.hljs-section { + color: #4271ae; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #8959a8; +} + +.hljs { + display: block; + overflow-x: auto; + background: white; + color: #4d4d4c; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/vs.css b/doc/html-manual/highlight/styles/vs.css new file mode 100644 index 00000000000..c5d07d3115d --- /dev/null +++ b/doc/html-manual/highlight/styles/vs.css @@ -0,0 +1,68 @@ +/* + +Visual Studio-like style based on original C# coloring by Jason Diamond + +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: white; + color: black; +} + +.hljs-comment, +.hljs-quote, +.hljs-variable { + color: #008000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-built_in, +.hljs-name, +.hljs-tag { + color: #00f; +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-attribute, +.hljs-literal, +.hljs-template-tag, +.hljs-template-variable, +.hljs-type, +.hljs-addition { + color: #a31515; +} + +.hljs-deletion, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-meta { + color: #2b91af; +} + +.hljs-doctag { + color: #808080; +} + +.hljs-attr { + color: #f00; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link { + color: #00b0e8; +} + + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/doc/html-manual/highlight/styles/xcode.css b/doc/html-manual/highlight/styles/xcode.css new file mode 100644 index 00000000000..43dddad84d7 --- /dev/null +++ b/doc/html-manual/highlight/styles/xcode.css @@ -0,0 +1,93 @@ +/* + +XCode style (c) Angel Garcia + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #fff; + color: black; +} + +.hljs-comment, +.hljs-quote { + color: #006a00; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-literal { + color: #aa0d91; +} + +.hljs-name { + color: #008; +} + +.hljs-variable, +.hljs-template-variable { + color: #660; +} + +.hljs-string { + color: #c41a16; +} + +.hljs-regexp, +.hljs-link { + color: #080; +} + +.hljs-title, +.hljs-tag, +.hljs-symbol, +.hljs-bullet, +.hljs-number, +.hljs-meta { + color: #1c00cf; +} + +.hljs-section, +.hljs-class .hljs-title, +.hljs-type, +.hljs-attr, +.hljs-built_in, +.hljs-builtin-name, +.hljs-params { + color: #5c2699; +} + +.hljs-attribute, +.hljs-subst { + color: #000; +} + +.hljs-formula { + background-color: #eee; + font-style: italic; +} + +.hljs-addition { + background-color: #baeeba; +} + +.hljs-deletion { + background-color: #ffc8bd; +} + +.hljs-selector-id, +.hljs-selector-class { + color: #9b703f; +} + +.hljs-doctag, +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} diff --git a/doc/html-manual/highlight/styles/xt256.css b/doc/html-manual/highlight/styles/xt256.css new file mode 100644 index 00000000000..58df82cb751 --- /dev/null +++ b/doc/html-manual/highlight/styles/xt256.css @@ -0,0 +1,92 @@ + +/* + xt256.css + + Contact: initbar [at] protonmail [dot] ch + : github.com/initbar +*/ + +.hljs { + display: block; + overflow-x: auto; + color: #eaeaea; + background: #000; + padding: 0.5; +} + +.hljs-subst { + color: #eaeaea; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-builtin-name, +.hljs-type { + color: #eaeaea; +} + +.hljs-params { + color: #da0000; +} + +.hljs-literal, +.hljs-number, +.hljs-name { + color: #ff0000; + font-weight: bolder; +} + +.hljs-comment { + color: #969896; +} + +.hljs-selector-id, +.hljs-quote { + color: #00ffff; +} + +.hljs-template-variable, +.hljs-variable, +.hljs-title { + color: #00ffff; + font-weight: bold; +} + +.hljs-selector-class, +.hljs-keyword, +.hljs-symbol { + color: #fff000; +} + +.hljs-string, +.hljs-bullet { + color: #00ff00; +} + +.hljs-tag, +.hljs-section { + color: #000fff; +} + +.hljs-selector-tag { + color: #000fff; + font-weight: bold; +} + +.hljs-attribute, +.hljs-built_in, +.hljs-regexp, +.hljs-link { + color: #ff00ff; +} + +.hljs-meta { + color: #fff; + font-weight: bolder; +} diff --git a/doc/html-manual/highlight/styles/zenburn.css b/doc/html-manual/highlight/styles/zenburn.css new file mode 100644 index 00000000000..07be502016b --- /dev/null +++ b/doc/html-manual/highlight/styles/zenburn.css @@ -0,0 +1,80 @@ +/* + +Zenburn style from voldmar.ru (c) Vladimir Epifanov +based on dark.css by Ivan Sagalaev + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #3f3f3f; + color: #dcdcdc; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-tag { + color: #e3ceab; +} + +.hljs-template-tag { + color: #dcdcdc; +} + +.hljs-number { + color: #8cd0d3; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-attribute { + color: #efdcbc; +} + +.hljs-literal { + color: #efefaf; +} + +.hljs-subst { + color: #8f8f8f; +} + +.hljs-title, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-section, +.hljs-type { + color: #efef8f; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link { + color: #dca3a3; +} + +.hljs-deletion, +.hljs-string, +.hljs-built_in, +.hljs-builtin-name { + color: #cc9393; +} + +.hljs-addition, +.hljs-comment, +.hljs-quote, +.hljs-meta { + color: #7f9f7f; +} + + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} From e43f9fef2e778597c30527ea894b99676e588195 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 11:48:51 +0100 Subject: [PATCH 032/290] use highlight --- doc/html-manual/cbmc.shtml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/doc/html-manual/cbmc.shtml b/doc/html-manual/cbmc.shtml index a40a56364d4..dde06874f8b 100644 --- a/doc/html-manual/cbmc.shtml +++ b/doc/html-manual/cbmc.shtml @@ -1,5 +1,9 @@ + + + +

    CPROVER Manual TOC

    CBMC: Bounded Model Checking for C/C++ and Java

    @@ -28,12 +32,13 @@ As an example, consider the following simple program, named


    - -int puts(const char *s) { }

    -int main(int argc, char **argv) {
    -    puts(argv[2]);
    +
    
    +int puts(const char *s) { }
    +
    +int main(int argc, char **argv) {
    +  puts(argv[2]);
     }
    -
    +

    From 3df9a74df4323e6d4f526bb62a6284c2036f0e4f Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 11:54:01 +0100 Subject: [PATCH 033/290] use highlight --- doc/html-manual/cbmc.shtml | 135 ++++++++++++++++++------------------- 1 file changed, 64 insertions(+), 71 deletions(-) diff --git a/doc/html-manual/cbmc.shtml b/doc/html-manual/cbmc.shtml index dde06874f8b..0d075d23663 100644 --- a/doc/html-manual/cbmc.shtml +++ b/doc/html-manual/cbmc.shtml @@ -31,15 +31,12 @@ As an example, consider the following simple program, named file1.c:

    -


    -
    
    -int puts(const char *s) { }
    +
    int puts(const char *s) { }
     
     int main(int argc, char **argv) {
       puts(argv[2]);
     }
     
    -

    Of course, this program is faulty, as the argv array might have fewer @@ -137,17 +134,15 @@ is also useful for verifying program modules. Consider the following example, called file2.c:

    -
    - -int array[10];

    -int sum() {
    -  unsigned i, sum;

    -  sum=0;
    -  for(i=0; i<10; i++)
    -    sum+=array[i];
    +
    int array[10];
    +int sum() {
    +  unsigned i, sum;
    +
    +  sum=0;
    +  for(i=0; i<10; i++)
    +    sum+=array[i];
     }
    -
    -
    +

    In order to set the entry point to the sum function, run @@ -173,25 +168,25 @@ unwinding is performed. As an example, consider the program binsearch.c:

    -
    - -int binsearch(int x) {
    -  int a[16];
    -  signed low=0, high=16;

    -  while(low<high) {
    -    signed middle=low+((high-low)>>1);
    -
    -    if(a[middle]<x)
    -      high=middle;
    -    else if(a[middle]>x)
    -      low=middle+1;
    -    else // a[middle]=x !
    -      return middle;
    -  }

    -  return -1;
    +
    
    +int binsearch(int x) {
    +  int a[16];
    +  signed low=0, high=16;
    +
    +  while(low<high) {
    +    signed middle=low+((high-low)>>1);
    +
    +    if(a[middle]<x)
    +      high=middle;
    +    else if(a[middle]>x)
    +      low=middle+1;
    +    else // a[middle]==x
    +      return middle;
    +  }
    +
    +  return -1;
     }
    -
    -
    +

    If you run CBMC on this function, you will notice that the unwinding @@ -224,48 +219,46 @@ all bugs. The following program (lock-example.c) is an example of a program with a user-specified property:

    -
    - -_Bool nondet_bool();
    -_Bool LOCK = 0;
    -
    -_Bool lock() {
    -  if(nondet_bool()) {
    -    assert(!LOCK);
    -    LOCK=1;
    -    return 1; }
    -
    -  return 0;
    -}
    -
    -void unlock() {
    -  assert(LOCK);
    -  LOCK=0;
    -}
    -
    -int main() {
    -  unsigned got_lock = 0;
    -  int times;
    -
    -  while(times > 0) {
    -    if(lock()) {
    -      got_lock++;
    -      /* critical section */
    -    }
    -
    -    if(got_lock!=0)
    -      unlock();
    -
    -    got_lock--;
    -    times--;
    +
    
    +_Bool nondet_bool();
    +_Bool LOCK = 0;
    +
    +_Bool lock() {
    +  if(nondet_bool()) {
    +    assert(!LOCK);
    +    LOCK=1;
    +    return 1; }
    +
    +  return 0;
    +}
    +
    +void unlock() {
    +  assert(LOCK);
    +  LOCK=0;
    +}
    +
    +int main() {
    +  unsigned got_lock = 0;
    +  int times;
    +
    +  while(times > 0) {
    +    if(lock()) {
    +      got_lock++;
    +      /* critical section */
    +    }
    +
    +    if(got_lock!=0)
    +      unlock();
    +
    +    got_lock--;
    +    times--;
     } }
    -
    -
    +

    -The while loop in the main function has no (useful) run-time -bound. Thus, a bound has to be set on the amount of unwinding that -CBMC performs. There are two ways to do so: +The while loop in the main function has no +(useful) run-time bound. Thus, a bound has to be set on the amount of +unwinding that CBMC performs. There are two ways to do so:

      From fbd4e4082dc966668ad1ee0ed8dedfa618aa6869 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 12:03:26 +0100 Subject: [PATCH 034/290] use highlight --- doc/html-manual/cbmc-loops.shtml | 26 ++++++++++++----------- doc/html-manual/cbmc.shtml | 6 ++---- doc/html-manual/modeling-assertions.shtml | 16 ++++++++------ doc/html-manual/satabs.shtml | 4 ++++ 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/doc/html-manual/cbmc-loops.shtml b/doc/html-manual/cbmc-loops.shtml index 1228b22d087..dfee1ff9f76 100644 --- a/doc/html-manual/cbmc-loops.shtml +++ b/doc/html-manual/cbmc-loops.shtml @@ -1,5 +1,9 @@ + + + +

      CPROVER Manual TOC

      CBMC: Bounded Model Checking for C/C++ and Java

      @@ -68,19 +72,17 @@ number of loop iterations. This may even work when the number of loop unwindings is not constant. Consider the following example:

      -
      - -_Bool f();
      -
      -int main() {
      -  for(int i=0; i<100; i++) {
      -    if(f()) break;
      -  }
      -
      -  assert(0);
      +
      
      +_Bool f();
      +
      +int main() {
      +  for(int i=0; i<100; i++) {
      +    if(f()) break;
      +  }
      +  
      +  assert(0);
       }
      -
      -
      +

      The loop in the program above has an obvious upper bound on the number of diff --git a/doc/html-manual/cbmc.shtml b/doc/html-manual/cbmc.shtml index 0d075d23663..b98f622f65d 100644 --- a/doc/html-manual/cbmc.shtml +++ b/doc/html-manual/cbmc.shtml @@ -168,8 +168,7 @@ unwinding is performed. As an example, consider the program binsearch.c:

      -
      
      -int binsearch(int x) {
      +
      int binsearch(int x) {
         int a[16];
         signed low=0, high=16;
       
      @@ -219,8 +218,7 @@ all bugs. The following program
       (lock-example.c) is an example
       of a program with a user-specified property:

      -
      
      -_Bool nondet_bool();
      +
      _Bool nondet_bool();
       _Bool LOCK = 0;
       
       _Bool lock() {
      diff --git a/doc/html-manual/modeling-assertions.shtml b/doc/html-manual/modeling-assertions.shtml
      index 14aedc03721..c346f616f21 100644
      --- a/doc/html-manual/modeling-assertions.shtml
      +++ b/doc/html-manual/modeling-assertions.shtml
      @@ -1,5 +1,9 @@
       
       
      +
      +
      +
      +
       

      CPROVER Manual TOC

      Modeling with Assertions and Assumptions

      @@ -14,9 +18,9 @@ href="http://en.wikipedia.org/wiki/Assert.h">assert.h, which offers a macro assert(cond). When executing a statement such as

      - -  assert(p!=NULL); - +
      
      +  assert(p!=NULL);
      +

      the execution is aborted with an error message if the condition evaluates to false, i.e., if p is NULL in the @@ -29,9 +33,9 @@ using the --no-assertions command line option.

      In addition, there is a CPROVER-specific way to specify assertions, using the built-in function __CPROVER_assert:

      - -  __CPROVER_assert(p!=NULL, "p is not NULL"); - +
      
      +  __CPROVER_assert(p!=NULL, "p is not NULL");
      +

      The (mandatory) string that is passed as the second argument provides an informal description of the assertion. diff --git a/doc/html-manual/satabs.shtml b/doc/html-manual/satabs.shtml index ff633cddfce..af76be82a11 100644 --- a/doc/html-manual/satabs.shtml +++ b/doc/html-manual/satabs.shtml @@ -1,5 +1,9 @@ + + + +

      CPROVER Manual TOC

      SATABS – Predicate Abstraction with SAT

      From 46d274dc2efad3f2525bcbe8b7533521706777ca Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 12:08:03 +0100 Subject: [PATCH 035/290] use highlight --- doc/html-manual/modeling-assertions.shtml | 81 +++++++++++------------ 1 file changed, 38 insertions(+), 43 deletions(-) diff --git a/doc/html-manual/modeling-assertions.shtml b/doc/html-manual/modeling-assertions.shtml index c346f616f21..be6b88796e7 100644 --- a/doc/html-manual/modeling-assertions.shtml +++ b/doc/html-manual/modeling-assertions.shtml @@ -18,8 +18,7 @@ href="http://en.wikipedia.org/wiki/Assert.h">assert.h, which offers a macro assert(cond). When executing a statement such as

      -
      
      -  assert(p!=NULL);
      +
        assert(p!=NULL);
       

      the execution is aborted with an error message if the @@ -33,8 +32,7 @@ using the --no-assertions command line option.

      In addition, there is a CPROVER-specific way to specify assertions, using the built-in function __CPROVER_assert:

      -
      
      -  __CPROVER_assert(p!=NULL, "p is not NULL");
      +
        __CPROVER_assert(p!=NULL, "p is not NULL");
       

      The (mandatory) string that is passed as the @@ -91,20 +89,19 @@ a nondeterministic choice that returns a number from 1 to 100. There is no integer type with this range. We therefore use __CPROVER_assume to restrict the range of a nondeterministically chosen integer:

      - -unsigned int nondet_uint();
      -
      -unsigned int one_to_hundred()
      -{
      -  unsigned int result=nondet_uint();
      -  __CPROVER_assume(result>=1 && result<=100);
      -  return result;
      -}
      +
      unsigned int nondet_uint();
      +
      +unsigned int one_to_hundred()
      +{
      +  unsigned int result=nondet_uint();
      +  __CPROVER_assume(result>=1 && result<=100);
      +  return result;
      +}

      The function above returns the desired integer from 1 -to 100. You must ensure that the condition given as an assumption is -actually satisfiable by some nondeterministic choice, or otherwise -the model checking step will pass vacuously.

      +to 100. You must ensure that the condition given as +an assumption is actually satisfiable by some nondeterministic choice, or +otherwise the model checking step will pass vacuously.

      Also note that assumptions are never retroactive: They only affect assertions (or other properties) that follow them in program @@ -113,45 +110,43 @@ the assumption has no effect on the assertion, which means that the assertion will fail:

      - -  x=nondet_uint();
      -  assert(x==100);
      -  __CPROVER_assume(x==100);
      -
      +
      x=nondet_uint();
      +  assert(x==100);
      +  __CPROVER_assume(x==100);
      +

      Assumptions do restrict the search space, but only for assertions that follow. As an example, the following program will pass:

      - -int main() {
      -  int x;
      -
      -  __CPROVER_assume(x>=1 && x<=100000);
      -
      -  x*=-1;
      -
      -  __CPROVER_assert(x<0, "x is negative");
      +
      int main() {
      +  int x;
      +
      +  __CPROVER_assume(x>=1 && x<=100000);
      +
      +  x*=-1;
      +
      +  __CPROVER_assert(x<0, "x is negative");
       }
      -
      +

      Beware that nondeterminism cannot be used to obtain the effect of universal quantification in assumptions. As an example,

      - -int main() {
      -  int a[10], x, y;
      -
      -  x=nondet_int();
      -  y=nondet_int();
      -  __CPROVER_assume(x>=0 && x<10 && y>=0 && y<10);
      -
      -  __CPROVER_assume(a[x]>=0);
      -
      -  assert(a[y]>=0);
      +
      
      +int main() {
      +  int a[10], x, y;
      +
      +  x=nondet_int();
      +  y=nondet_int();
      +  __CPROVER_assume(x>=0 && x<10 && y>=0 && y<10);
      +
      +  __CPROVER_assume(a[x]>=0);
      +
      +  assert(a[y]>=0);
       }
      -
      +

      fails, as there is a choice of x and y which results in a counterexample (any choice in which x and y are different). From 7afe0c6b71db944aa4df34aaaa43527b05c81aca Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 12:10:04 +0100 Subject: [PATCH 036/290] use highlight --- doc/html-manual/modeling-assertions.shtml | 38 +++++++++++------------ 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/doc/html-manual/modeling-assertions.shtml b/doc/html-manual/modeling-assertions.shtml index be6b88796e7..3e1970585e3 100644 --- a/doc/html-manual/modeling-assertions.shtml +++ b/doc/html-manual/modeling-assertions.shtml @@ -46,29 +46,28 @@ to check a range of choices. As an example, the following code fragment asserts that all elements of the array are zero:

      - -  int a[100], i;
      -
      -  ...
      -
      -  i=nondet_uint();
      -  if(i>=0 && i<100)
      -    assert(a[i]==0); -
      +
      
      +  int a[100], i;
      +
      +  ...
      +
      +  i=nondet_uint();
      +  if(i>=0 && i<100)
      +    assert(a[i]==0);
      +

      The nondeterministic choice will guess the element of the array that is nonzero. The code fragment above is therefore equivalent to

      - -  int a[100], i;
      -
      -  ...
      -
      -  for(i=0; i<100; i++)
      -    assert(a[i]==0); -
      +
        int a[100], i;
      +
      +  ...
      +
      +  for(i=0; i<100; i++)
      +    assert(a[i]==0);
      +

      Future CPROVER releases will support explicit quantifiers with a syntax that resembles Spec#: @@ -110,7 +109,7 @@ the assumption has no effect on the assertion, which means that the assertion will fail:

      -
      x=nondet_uint();
      +
        x=nondet_uint();
         assert(x==100);
         __CPROVER_assume(x==100);
       
      @@ -134,8 +133,7 @@ As an example, the following program will pass:

      the effect of universal quantification in assumptions. As an example,

      -
      
      -int main() {
      +
      int main() {
         int a[10], x, y;
       
         x=nondet_int();
      
      From 15cf4a7c641f2300cc445fd9a17368a0ce035ac1 Mon Sep 17 00:00:00 2001
      From: Daniel Kroening 
      Date: Mon, 13 Jun 2016 12:11:36 +0100
      Subject: [PATCH 037/290] use highlight
      
      ---
       doc/html-manual/modeling-assertions.shtml |  3 +--
       doc/html-manual/modeling-pointers.shtml   | 13 ++++++-------
       2 files changed, 7 insertions(+), 9 deletions(-)
      
      diff --git a/doc/html-manual/modeling-assertions.shtml b/doc/html-manual/modeling-assertions.shtml
      index 3e1970585e3..d85909a6795 100644
      --- a/doc/html-manual/modeling-assertions.shtml
      +++ b/doc/html-manual/modeling-assertions.shtml
      @@ -46,8 +46,7 @@ to check a range of choices.  As an example, the following code fragment
       asserts that all elements of the array are zero:
       

      -
      
      -  int a[100], i;
      +
        int a[100], i;
       
         ...
       
      diff --git a/doc/html-manual/modeling-pointers.shtml b/doc/html-manual/modeling-pointers.shtml
      index 29168336bd2..080b5336fab 100644
      --- a/doc/html-manual/modeling-pointers.shtml
      +++ b/doc/html-manual/modeling-pointers.shtml
      @@ -36,13 +36,12 @@ pointer) is relative to the beginning of the object; it uses byte
       granularity. As an example, the code fragment
       

      - -  unsigned array[10];
      -  char *p;
      -
      -  p=(char *)(array+1);
      -  p++; -
      +
        unsigned array[10];
      +  char *p;
      +
      +  p=(char *)(array+1);
      +  p++;
      +

      will result in a pointer with offset 5. The offset of a pointer p can be extracted using the expression From cc9dd1a7244f2f16c19f85ebd025f0e3c370a650 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 12:11:47 +0100 Subject: [PATCH 038/290] use highlight --- doc/html-manual/modeling-pointers.shtml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/html-manual/modeling-pointers.shtml b/doc/html-manual/modeling-pointers.shtml index 080b5336fab..2f2f16244c4 100644 --- a/doc/html-manual/modeling-pointers.shtml +++ b/doc/html-manual/modeling-pointers.shtml @@ -1,5 +1,9 @@ + + + +

      CPROVER Manual TOC

      Pointer Model

      From 9c6d00e250b36c66990cc361fc3211fdc62a985e Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 14:57:39 +0100 Subject: [PATCH 039/290] use highlight --- doc/html-manual/properties.shtml | 17 +++--- doc/html-manual/satabs-driver.shtml | 87 ++++++++++++++--------------- doc/html-manual/satabs.shtml | 72 ++++++++++++------------ 3 files changed, 86 insertions(+), 90 deletions(-) diff --git a/doc/html-manual/properties.shtml b/doc/html-manual/properties.shtml index 7795e0bf14c..aba408fc4c8 100644 --- a/doc/html-manual/properties.shtml +++ b/doc/html-manual/properties.shtml @@ -135,15 +135,14 @@ As an example, we begin with small C program we call


      - -int *ptr;
      -
      -int main(void) {
      -  if (ptr)
      -    *ptr = 0;
      -  if (!ptr)
      -    *ptr = 1;
      -}
      +
      int *ptr;
      +
      +int main(void) {
      +  if (ptr)
      +    *ptr = 0;
      +  if (!ptr)
      +    *ptr = 1;
      +}

      diff --git a/doc/html-manual/satabs-driver.shtml b/doc/html-manual/satabs-driver.shtml index fbaeddb65a4..65ec8a7ecb2 100644 --- a/doc/html-manual/satabs-driver.shtml +++ b/doc/html-manual/satabs-driver.shtml @@ -60,17 +60,17 @@ The driver contains following functions:


      - -int usecount;
      -
      -int register_chrdev (unsigned int major, const char* name)
      -{
      -  usecount = 0;
      -  if (major == 0)
      -    return MAJOR_NUMBER;
      -  return major;
      -}
      -
      +
      
      +int usecount;
      +
      +int register_chrdev (unsigned int major, const char* name)
      +{
      +  usecount = 0;
      +  if (major == 0)
      +    return MAJOR_NUMBER;
      +  return major;
      +}
      +
    1. unregister_chrdev: (in spec.c) @@ -79,18 +79,17 @@ int register_chrdev (unsigned int major, const char* name)
      anymore (we use the macro MOD_IN_USE to check this).

      -
      - -int unregister_chrdev (unsigned int major, const char* name)
      -{
      -  if (MOD_IN_USE)
      -    {
      -    ERROR: assert (0);
      -    }
      -  else
      -    return 0;
      -}
      -
    2. +
      
      +int unregister_chrdev (unsigned int major, const char* name)
      +{
      +  if (MOD_IN_USE)
      +    {
      +    ERROR: assert (0);
      +    }
      +  else
      +    return 0;
      +}
      +
    3. dummy_open: (in driver.c) This function @@ -155,27 +154,27 @@ dispatching functions:


      -      random = nondet_uchar ();
      -      __CPROVER_assume (0 <= random && random <= 3);
      -
      -      switch (random)
      -      {
      -      case 1:
      -        rval = dummy_open (&inode, &my_file);
      -        if (rval == 0)
      -          lock_held = TRUE;
      -        break;
      -      case 2:
      -        __CPROVER_assume (lock_held);
      -        count = dummy_read (&my_file, buffer, BUF_SIZE);
      -        break;
      -      case 3:
      -        dummy_release (&inode, &my_file);
      -        lock_held = FALSE;
      -        break;
      -      default:
      -        break;
      -      } + random = nondet_uchar (); + __CPROVER_assume (0 <= random && random <= 3); + + switch (random) + { + case 1: + rval = dummy_open (&inode, &my_file); + if (rval == 0) + lock_held = TRUE; + break; + case 2: + __CPROVER_assume (lock_held); + count = dummy_read (&my_file, buffer, BUF_SIZE); + break; + case 3: + dummy_release (&inode, &my_file); + lock_held = FALSE; + break; + default: + break; + }

      diff --git a/doc/html-manual/satabs.shtml b/doc/html-manual/satabs.shtml index af76be82a11..ba67500f710 100644 --- a/doc/html-manual/satabs.shtml +++ b/doc/html-manual/satabs.shtml @@ -32,44 +32,42 @@ an example, reconsider the following program (lock-example-fixed.c):

      -
      - -_Bool nondet_bool();
      -_Bool LOCK = 0;
      -
      -_Bool lock() {
      -  if(nondet_bool()) {
      -    assert(!LOCK);
      -    LOCK=1;
      -    return 1; }
      -
      -  return 0;
      -}
      -
      -void unlock() {
      -  assert(LOCK);
      -  LOCK=0;
      -}
      -
      -int main() {
      -  unsigned got_lock = 0;
      -  int times;
      -
      -  while(times > 0) {
      -    if(lock()) {
      -      got_lock++;
      -      /* critical section */
      -    }
      -
      -    if(got_lock!=0) {
      -      unlock();
      -      got_lock--;
      -    }
      -
      -    times--;
      +
      
      +_Bool nondet_bool();
      +_Bool LOCK = 0;
      +
      +_Bool lock() {
      +  if(nondet_bool()) {
      +    assert(!LOCK);
      +    LOCK=1;
      +    return 1; }
      +
      +  return 0;
      +}
      +
      +void unlock() {
      +  assert(LOCK);
      +  LOCK=0;
      +}
      +
      +int main() {
      +  unsigned got_lock = 0;
      +  int times;
      +
      +  while(times > 0) {
      +    if(lock()) {
      +      got_lock++;
      +      /* critical section */
      +    }
      +
      +    if(got_lock!=0) {
      +      unlock();
      +      got_lock--;
      +    }
      +
      +    times--;
       } }
      -
      -
      +

      The two assertions in the program model that the functions lock() From 7167c2933d40e6e65c12c34e5c36901639b58892 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 15:00:22 +0100 Subject: [PATCH 040/290] use highlight --- doc/html-manual/cbmc-loops.shtml | 37 ++++++++++++++++---------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/doc/html-manual/cbmc-loops.shtml b/doc/html-manual/cbmc-loops.shtml index dfee1ff9f76..48230958af0 100644 --- a/doc/html-manual/cbmc-loops.shtml +++ b/doc/html-manual/cbmc-loops.shtml @@ -36,25 +36,25 @@ the following loop-free program:


      - +
      
       int main(int argc, char **argv) {
      -  if(cond) {
      -    BODY CODE COPY 1
      -    if(cond) {
      -      BODY CODE COPY 2
      -      if(cond) {
      -        BODY CODE COPY 3
      -        if(cond) {
      -          BODY CODE COPY 4
      -          if(cond) {
      -            BODY CODE COPY 5
      -          }
      -        }
      -      }
      -    }
      -  }
      + if(cond) {
      + BODY CODE COPY 1
      + if(cond) {
      + BODY CODE COPY 2
      + if(cond) {
      + BODY CODE COPY 3
      + if(cond) {
      + BODY CODE COPY 4
      + if(cond) {
      + BODY CODE COPY 5
      + }
      + }
      + }
      + }
      + }
      } -
      +

      @@ -72,8 +72,7 @@ number of loop iterations. This may even work when the number of loop unwindings is not constant. Consider the following example:

      -
      
      -_Bool f();
      +
      _Bool f();
       
       int main() {
         for(int i=0; i<100; i++) {
      
      From 3fa8efdd05d94e3eced9fea683e85197f99b10dd Mon Sep 17 00:00:00 2001
      From: Daniel Kroening 
      Date: Mon, 13 Jun 2016 15:12:59 +0100
      Subject: [PATCH 041/290] use highlight
      
      ---
       doc/html-manual/cbmc-loops.shtml | 104 ++++++++++++++-----------------
       1 file changed, 46 insertions(+), 58 deletions(-)
      
      diff --git a/doc/html-manual/cbmc-loops.shtml b/doc/html-manual/cbmc-loops.shtml
      index 48230958af0..a56bbb15347 100644
      --- a/doc/html-manual/cbmc-loops.shtml
      +++ b/doc/html-manual/cbmc-loops.shtml
      @@ -19,15 +19,12 @@ essentially amounts to unwinding loops.  This concept is best
       illustrated with a generic example:
       

      -
      - -int main(int argc, char **argv) {
      -  while(cond) {
      -    BODY CODE
      -  }
      +
      int main(int argc, char **argv) {
      +  while(cond) {
      +    BODY CODE
      +  }
       }
      -
      -
      +

      A BMC instance that will find bugs with up to 5 iterations of the loop would @@ -35,27 +32,24 @@ contain 5 copies of the loop body, and essentially corresponds to checking the following loop-free program:

      -
      -
      
      -int main(int argc, char **argv) {
      - if(cond) {
      - BODY CODE COPY 1
      - if(cond) {
      - BODY CODE COPY 2
      - if(cond) {
      - BODY CODE COPY 3
      - if(cond) {
      - BODY CODE COPY 4
      - if(cond) {
      - BODY CODE COPY 5
      - }
      - }
      - }
      - }
      - }
      +
      int main(int argc, char **argv) {
      +  if(cond) {
      +    BODY CODE COPY 1
      +    if(cond) {
      +      BODY CODE COPY 2
      +      if(cond) {
      +        BODY CODE COPY 3
      +        if(cond) {
      +          BODY CODE COPY 4
      +          if(cond) {
      +            BODY CODE COPY 5
      +          }
      +        }
      +      }
      +    }
      +  }
       }
       
      -

      Note the use of the if statement to prevent the execution of @@ -156,28 +150,25 @@ this unwinding assertion for a bound of 5 corresponds to checking the following loop-free program:

      -
      - -int main(int argc, char **argv) {
      -  if(cond) {
      -    BODY CODE COPY 1
      -    if(cond) {
      -      BODY CODE COPY 2
      -      if(cond) {
      -        BODY CODE COPY 3
      -        if(cond) {
      -          BODY CODE COPY 4
      -          if(cond) {
      -            BODY CODE COPY 5
      -            assert(!cond);
      -          }
      -        }
      -      }
      -    }
      -  }
      +int main(int argc, char **argv) { + if(cond) { + BODY CODE COPY 1 + if(cond) { + BODY CODE COPY 2 + if(cond) { + BODY CODE COPY 3 + if(cond) { + BODY CODE COPY 4 + if(cond) { + BODY CODE COPY 5 + assert(!cond); + } + } + } + } + } } - -
      +

      The unwinding assertions can be verified just like any other generated @@ -193,17 +184,14 @@ of code that follows the loop. As an example, consider the following program:

      -
      - -int main() {
      -  for(int i=0; i<10000; i++) {
      -    BODY CODE
      -  }
      -
      -  assert(0);
      +
      int main() {
      +  for(int i=0; i<10000; i++) {
      +    BODY CODE
      +  }
      +  
      +  assert(0);
       }
      -
      -
      +

      In the example above, small values of --unwind will From 772a31f56f5113247508247462367f5470700397 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 15:27:12 +0100 Subject: [PATCH 042/290] use highlight --- doc/html-manual/cbmc-loops.shtml | 12 ++--- doc/html-manual/hwsw-tutorial.shtml | 68 ++++++++++++++--------------- doc/html-manual/satabs-aeon.shtml | 23 +++++----- doc/html-manual/satabs-driver.shtml | 64 ++++++++++----------------- doc/html-manual/satabs.shtml | 3 +- 5 files changed, 73 insertions(+), 97 deletions(-) diff --git a/doc/html-manual/cbmc-loops.shtml b/doc/html-manual/cbmc-loops.shtml index a56bbb15347..f8e94175b3a 100644 --- a/doc/html-manual/cbmc-loops.shtml +++ b/doc/html-manual/cbmc-loops.shtml @@ -27,8 +27,8 @@ illustrated with a generic example:

      -A BMC instance that will find bugs with up to 5 iterations of the loop would -contain 5 copies of the loop body, and essentially corresponds to checking +A BMC instance that will find bugs with up to five iterations of the loop would +contain five copies of the loop body, and essentially corresponds to checking the following loop-free program:

      @@ -53,9 +53,9 @@ the following loop-free program:

      Note the use of the if statement to prevent the execution of -the loop body in the case that the loop ends before 5 iterations are executed. +the loop body in the case that the loop ends before five iterations are executed. The construction above is meant to produce a program that is trace equivalent -with the original programs for those traces that contain up to 5 iterations +with the original programs for those traces that contain up to five iterations of the loop.

      @@ -146,11 +146,11 @@ problem, CBMC can optionally insert checks that the given unwinding bound is actually sufficiently large. These checks are called unwinding assertions, and are enabled with the option --unwinding-assertions. Continuing the generic example above, -this unwinding assertion for a bound of 5 corresponds to checking the +this unwinding assertion for a bound of five corresponds to checking the following loop-free program:

      -int main(int argc, char **argv) { +
      int main(int argc, char **argv) {
         if(cond) {
           BODY CODE COPY 1
           if(cond) {
      diff --git a/doc/html-manual/hwsw-tutorial.shtml b/doc/html-manual/hwsw-tutorial.shtml
      index 36e5a8c40fd..36bf7fe0f83 100644
      --- a/doc/html-manual/hwsw-tutorial.shtml
      +++ b/doc/html-manual/hwsw-tutorial.shtml
      @@ -17,20 +17,18 @@ The following Verilog module implements a 4-bit counter
       (counter.v):
       

      -
      - -module top(input clk);
      -
      -  reg [3:0] counter;
      -
      -  initial counter=0;
      -
      -  always @(posedge clk)
      -    counter=counter+1;
      -
      -endmodule
      -
      -
      +
      
      +module top(input clk);
      +
      +  reg [3:0] counter;
      +
      +  initial counter=0;
      +
      +  always @(posedge clk)
      +    counter=counter+1;
      +
      +endmodule
      +

      HW-CBMC can take Verilog modules as the one above as additional input. Similar @@ -41,10 +39,10 @@ of the counter register:

      -struct module_top {
      -  unsigned int counter;
      -};
      -
      +struct module_top { + unsigned int counter; +}; + extern struct module_top top;
      @@ -86,25 +84,23 @@ two values of the trace of the counter module (counter.c):

      -
      - -void next_timeframe();
      -
      -struct module_top {
      -  unsigned int counter;
      -};
      -
      -extern struct module_top top;
      -
      -int main() {
      -  next_timeframe();
      -  next_timeframe();
      -  assert(top.counter==2);
      -  next_timeframe();
      -  assert(top.counter==3);
      +
      
      +void next_timeframe();
      +
      +struct module_top {
      +  unsigned int counter;
      +};
      +
      +extern struct module_top top;
      +
      +int main() {
      +  next_timeframe();
      +  next_timeframe();
      +  assert(top.counter==2);
      +  next_timeframe();
      +  assert(top.counter==3);
       }
      -
      -
      +

      The following CBMC command line checks these assertions with a bound of diff --git a/doc/html-manual/satabs-aeon.shtml b/doc/html-manual/satabs-aeon.shtml index 76d803a5f7f..0ed260ef852 100644 --- a/doc/html-manual/satabs-aeon.shtml +++ b/doc/html-manual/satabs-aeon.shtml @@ -61,18 +61,17 @@ Now consider the first few lines of the main function of Aeon:

      - -int main(int argc, char **argv)}
      -{
      -  char settings[MAX_SETTINGS][MAX_LEN];}
      -  ...
      -  numSet = getConfig(settings);
      -  if (numSet == -1) {
      -    logEntry("Missing config file!");
      -    exit(1);
      -  }
      -  ... -
      +
      int main(int argc, char **argv)
      +{
      +  char settings[MAX_SETTINGS][MAX_LEN];
      +  ...
      +  numSet = getConfig(settings);
      +  if (numSet == -1) {
      +    logEntry("Missing config file!");
      +    exit(1);
      +  }
      +  ...
      +

      and the function getConfig in lib_aeon.c: diff --git a/doc/html-manual/satabs-driver.shtml b/doc/html-manual/satabs-driver.shtml index 65ec8a7ecb2..2efa8671892 100644 --- a/doc/html-manual/satabs-driver.shtml +++ b/doc/html-manual/satabs-driver.shtml @@ -59,9 +59,7 @@ The driver contains following functions:

      specified by the user otherwise).

      -
      -
      
      -int usecount;
      +
      int usecount;
       
       int register_chrdev (unsigned int major, const char* name)
       {
      @@ -79,8 +77,7 @@ int register_chrdev (unsigned int major, const char* name)
           anymore (we use the macro MOD_IN_USE to check this).
         

      -
      
      -int unregister_chrdev (unsigned int major, const char* name)
      +
      int unregister_chrdev (unsigned int major, const char* name)
       {
         if (MOD_IN_USE)
           {
      @@ -97,13 +94,9 @@ int unregister_chrdev (unsigned int major, const char* name)
           some other process dummy_open returns -1. Otherwise
           it locks the device for the caller.     
         

      - -
    4. - - -
    5. dummy_read: (in driver.c) This function +

    6. dummy_read: (in driver.c) This function "simulates" a read access to the device. In fact it does nothing, since we are currently not interested in the potential buffer overflow that may result from a call to this function. @@ -118,17 +111,13 @@ int unregister_chrdev (unsigned int major, const char* name) return a value between 0 and max. If the lock is not held, then dummy_read returns -1.

      -
    7. -
    8. dummy_release: (in driver.c) If the lock - is held, then dummy_release decreases - the usecount, releases the lock, and returns 0. Otherwise, - the function returns -1. -

      - - -
    9. +
    10. dummy_release: (in driver.c) If the lock +is held, then dummy_release decreases +the usecount, releases the lock, and returns 0. Otherwise, +the function returns -1. +

    @@ -152,8 +141,7 @@ We use the following model checking harness for calling the dispatching functions:

    -
    - +
    
           random = nondet_uchar ();
           __CPROVER_assume (0 <= random && random <= 3);
     
    @@ -175,8 +163,7 @@ dispatching functions:
           default:
             break;
           }
    -
    -
    +

    The variable random is assigned non-deterministically. @@ -249,24 +236,19 @@ leading to a usecount of 2. The second call of course fails with rval=-1, but the counter is increased nevertheless:

    -

    -


    - -int dummy_open (struct inode *inode, struct file *filp)
    -{
    -  __CPROVER_assert(MAJOR (inode->i_rdev) == dummy_major, -      "i_rdev mismatch");
    -  MOD_INC_USE_COUNT;
    -
    -  if (locked)
    -    return -1;
    -  locked = TRUE;
    -
    -  return 0; /* success */
    -}
    -
    -
    -

    +
    int dummy_open (struct inode *inode, struct file *filp)
    +{
    +  __CPROVER_assert(MAJOR (inode->i_rdev) == dummy_major,
    +      "i_rdev mismatch");
    +  MOD_INC_USE_COUNT;
    +
    +  if (locked)
    +    return -1;
    +  locked = TRUE;
    +
    +  return 0; /* success */
    +}
    +

    Then, dummy_release is called to release the lock on the diff --git a/doc/html-manual/satabs.shtml b/doc/html-manual/satabs.shtml index ba67500f710..6ec21bb45b3 100644 --- a/doc/html-manual/satabs.shtml +++ b/doc/html-manual/satabs.shtml @@ -32,8 +32,7 @@ an example, reconsider the following program (lock-example-fixed.c):

    -
    
    -_Bool nondet_bool();
    +
    _Bool nondet_bool();
     _Bool LOCK = 0;
     
     _Bool lock() {
    
    From 35db54cf1cc4e0a08938b8cda79e880325f2fb72 Mon Sep 17 00:00:00 2001
    From: Daniel Kroening 
    Date: Mon, 13 Jun 2016 15:29:14 +0100
    Subject: [PATCH 043/290] use highlight
    
    ---
     doc/html-manual/hwsw-inputs.shtml   |  4 ++
     doc/html-manual/hwsw-mapping.shtml  | 58 +++++++++++++++--------------
     doc/html-manual/hwsw-tutorial.shtml |  4 ++
     3 files changed, 38 insertions(+), 28 deletions(-)
    
    diff --git a/doc/html-manual/hwsw-inputs.shtml b/doc/html-manual/hwsw-inputs.shtml
    index d67db5d7120..613c6762dcf 100644
    --- a/doc/html-manual/hwsw-inputs.shtml
    +++ b/doc/html-manual/hwsw-inputs.shtml
    @@ -1,5 +1,9 @@
     
     
    +
    +
    +
    +
     

    CPROVER Manual TOC

    Hardware and Software Equivalence and Co-Verification

    diff --git a/doc/html-manual/hwsw-mapping.shtml b/doc/html-manual/hwsw-mapping.shtml index f35da921c2a..f7a77d61029 100644 --- a/doc/html-manual/hwsw-mapping.shtml +++ b/doc/html-manual/hwsw-mapping.shtml @@ -1,5 +1,9 @@ + + + +

    CPROVER Manual TOC

    Hardware and Software Equivalence and Co-Verification

    @@ -19,27 +23,25 @@ As an example, consider the following Verilog file (hierarchy.v):

    -
    - -module counter(input clk, input [7:0] increment);
    -
    -  reg [7:0] counter;
    -
    -  initial counter=0;
    -
    -  always @(posedge clk)
    -    counter=counter+increment;
    -
    -endmodule
    -
    -module top(input clk);
    -
    -  counter c1(clk, 1);
    -  counter c2(clk, 2);
    -
    +
    
    +module counter(input clk, input [7:0] increment);
    +
    +  reg [7:0] counter;
    +
    +  initial counter=0;
    +
    +  always @(posedge clk)
    +    counter=counter+increment;
    +
     endmodule
    -
    -
    + +module top(input clk); + + counter c1(clk, 1); + counter c2(clk, 2); + +endmodule +

    The file has two modules: a top module and a counter module. The counter @@ -55,22 +57,22 @@ void next_timeframe();
    extern const unsigned int bound;

    struct counter {
    -  unsigned char increment;
    -  unsigned char counter;
    + unsigned char increment;
    + unsigned char counter;
    };

    struct module_top {
    -  struct module_counter c1, c2;
    + struct module_counter c1, c2;
    };

    extern struct module_top top;

    int main() {
    -  next_timeframe();
    -  next_timeframe();
    -  next_timeframe();
    -  assert(top.c1.counter==3);
    -  assert(top.c2.counter==6);
    + next_timeframe();
    + next_timeframe();
    + next_timeframe();
    + assert(top.c1.counter==3);
    + assert(top.c2.counter==6);
    }


    diff --git a/doc/html-manual/hwsw-tutorial.shtml b/doc/html-manual/hwsw-tutorial.shtml index 36bf7fe0f83..a68f43bffe6 100644 --- a/doc/html-manual/hwsw-tutorial.shtml +++ b/doc/html-manual/hwsw-tutorial.shtml @@ -1,5 +1,9 @@ + + + +

    CPROVER Manual TOC

    Hardware and Software Equivalence and Co-Verification

    From f1f665e2ed918b53782b6c46be31f354d3229b76 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 15:35:03 +0100 Subject: [PATCH 044/290] use highlight --- doc/html-manual/hwsw-inputs.shtml | 99 +++++++++++++---------------- doc/html-manual/hwsw-mapping.shtml | 48 +++++++------- doc/html-manual/hwsw-tutorial.shtml | 39 ++++++------ 3 files changed, 85 insertions(+), 101 deletions(-) diff --git a/doc/html-manual/hwsw-inputs.shtml b/doc/html-manual/hwsw-inputs.shtml index 613c6762dcf..5ca6fae69bc 100644 --- a/doc/html-manual/hwsw-inputs.shtml +++ b/doc/html-manual/hwsw-inputs.shtml @@ -20,21 +20,18 @@ so the verification problem can be solved by testing a single run. In contrast, consider the following Verilog module:

    -
    - -module top(input clk, input i);
    -
    -  reg [3:0] counter;
    -
    -  initial counter=0;
    -
    -  always @(posedge clk)
    -    if(i)
    -      counter=counter+1;
    -
    +
    module top(input clk, input i);
    +
    +  reg [3:0] counter;
    +
    +  initial counter=0;
    +
    +  always @(posedge clk)
    +    if(i)
    +      counter=counter+1;
    +
     endmodule
    -
    -
    +

    The module above has an input named i. The top-level inputs @@ -45,36 +42,33 @@ before calling next_timeframe(). Consider the following example:

    -
    - -void next_timeframe();
    -void set_inputs();
    -extern const unsigned int bound;
    -
    -struct module_top {
    -  unsigned int counter;
    -  _Bool i;
    -};
    -
    -extern struct module_top top;
    -
    -int main() {
    -  assert(top.counter==0);
    -
    -  top.i=1;
    -  set_inputs(); next_timeframe();
    -  assert(top.counter==1);
    -
    -  top.i=1;
    -  set_inputs(); next_timeframe();
    -  assert(top.counter==2);
    -
    -  top.i=0;
    -  set_inputs(); next_timeframe();
    -  assert(top.counter==2);
    +
    void next_timeframe();
    +void set_inputs();
    +extern const unsigned int bound;
    +
    +struct module_top {
    +  unsigned int counter;
    +  _Bool i;
    +};
    +
    +extern struct module_top top;
    +
    +int main() {
    +  assert(top.counter==0);
    +
    +  top.i=1;
    +  set_inputs(); next_timeframe();
    +  assert(top.counter==1);
    +
    +  top.i=1;
    +  set_inputs(); next_timeframe();
    +  assert(top.counter==2);
    +
    +  top.i=0;
    +  set_inputs(); next_timeframe();
    +  assert(top.counter==2);
     }
    -
    -
    +

    As an example, consider a @@ -83,17 +77,14 @@ active-low. The following C fragment drives this input to be active in the first cycle, and not active in any subsequent cycle:

    -
    - -  top.resetn=0;
    -  set_inputs(); next_timeframe();
    -
    -  for(i=1; i<bound; i++) {
    -    top.resetn=1;
    -    set_inputs(); next_timeframe();
    -  } -
    -
    +
    top.resetn=0;
    +  set_inputs(); next_timeframe();
    +
    +  for(i=1; i<bound; i++) {
    +    top.resetn=1;
    +    set_inputs(); next_timeframe();
    +  }
    +

    Note that the value of the input must be set before diff --git a/doc/html-manual/hwsw-mapping.shtml b/doc/html-manual/hwsw-mapping.shtml index f7a77d61029..c206ca753ea 100644 --- a/doc/html-manual/hwsw-mapping.shtml +++ b/doc/html-manual/hwsw-mapping.shtml @@ -23,8 +23,7 @@ As an example, consider the following Verilog file (hierarchy.v):

    -
    
    -module counter(input clk, input [7:0] increment);
    +
    module counter(input clk, input [7:0] increment);
     
       reg [7:0] counter;
     
    @@ -51,31 +50,28 @@ module instances have separate instances of the register. CBMC and SATABS
     use the following data structures for this example:
     

    -
    - -void next_timeframe();
    -extern const unsigned int bound;
    -
    -struct counter {
    - unsigned char increment;
    - unsigned char counter;
    -};
    -
    -struct module_top {
    - struct module_counter c1, c2;
    -};
    -
    -extern struct module_top top;
    -
    -int main() {
    - next_timeframe();
    - next_timeframe();
    - next_timeframe();
    - assert(top.c1.counter==3);
    - assert(top.c2.counter==6);
    +
    void next_timeframe();
    +extern const unsigned int bound;
    +
    +struct counter {
    +  unsigned char increment;
    +  unsigned char counter;
    +};
    +
    +struct module_top {
    +  struct module_counter c1, c2;
    +};
    +
    +extern struct module_top top;
    +
    +int main() {
    +  next_timeframe();
    +  next_timeframe();
    +  next_timeframe();
    +  assert(top.c1.counter==3);
    +  assert(top.c2.counter==6);
     }
    -
    -
    +

    The main function reads both counter values for cycle 3. A deeper diff --git a/doc/html-manual/hwsw-tutorial.shtml b/doc/html-manual/hwsw-tutorial.shtml index a68f43bffe6..b981eba125d 100644 --- a/doc/html-manual/hwsw-tutorial.shtml +++ b/doc/html-manual/hwsw-tutorial.shtml @@ -21,7 +21,7 @@ The following Verilog module implements a 4-bit counter (counter.v):

    -
    
    +
    
     module top(input clk);
     
       reg [3:0] counter;
    @@ -194,27 +194,24 @@ The following program is using the bound variable to check the counter value
     in all cycles:
     

    -
    - -void next_timeframe();
    -extern const unsigned int bound;
    -
    -struct module_top {
    -  unsigned int counter;
    -};
    -
    -extern struct module_top top;
    -
    -int main() {
    -  unsigned cycle;
    -
    -  for(cycle=0; cycle<bound; cycle++) {
    -    assert(top.counter==(cycle & 15));
    -    next_timeframe();
    -  }
    +
    void next_timeframe();
    +extern const unsigned int bound;
    +
    +struct module_top {
    +  unsigned int counter;
    +};
    +
    +extern struct module_top top;
    +
    +int main() {
    +  unsigned cycle;
    +
    +  for(cycle=0; cycle<bound; cycle++) {
    +    assert(top.counter==(cycle & 15));
    +    next_timeframe();
    +  }
     }
    -
    -
    +

    CBMC performs bounds checking, and restricts the number of times that From 82c55ff11e8a5dd1012598835b45af4502e71e87 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 15:39:55 +0100 Subject: [PATCH 045/290] use highlight --- doc/html-manual/highlight/highlight.pack.js | 2 +- doc/html-manual/hwsw-inputs.shtml | 2 +- doc/html-manual/hwsw-tutorial.shtml | 3 +-- doc/html-manual/satabs-aeon.shtml | 4 ++++ doc/html-manual/satabs-driver.shtml | 4 ++++ 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/doc/html-manual/highlight/highlight.pack.js b/doc/html-manual/highlight/highlight.pack.js index 39d95d36c8b..fa635608228 100644 --- a/doc/html-manual/highlight/highlight.pack.js +++ b/doc/html-manual/highlight/highlight.pack.js @@ -1,2 +1,2 @@ /*! highlight.js v9.4.0 | BSD3 License | git.io/hljslicense */ -!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(//gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/i.exec(i))return w(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset"}function u(e){f+=""}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,f="",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else"start"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t";return i+=e+'">',i+n+o}function h(){if(!k.k)return n(M);var e="",t=0;k.lR.lastIndex=0;for(var r=k.lR.exec(M);r;){e+=n(M.substr(t,r.index-t));var a=g(k,r);a?(B+=a[1],e+=p(a[0],n(r[0]))):e+=n(r[0]),t=k.lR.lastIndex,r=k.lR.exec(M)}return e+n(M.substr(t))}function d(){var e="string"==typeof k.sL;if(e&&!R[k.sL])return n(M);var t=e?f(k.sL,M,!0,y[k.sL]):l(M,k.sL.length?k.sL:void 0);return k.r>0&&(B+=t.r),e&&(y[k.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=void 0!==k.sL?d():h(),M=""}function v(e,n){L+=e.cN?p(e.cN,"",!0):"",k=Object.create(e,{parent:{value:k}})}function m(e,n){if(M+=e,void 0===n)return b(),0;var t=o(n,k);if(t)return t.skip?M+=n:(t.eB&&(M+=n),b(),t.rB||t.eB||(M=n)),v(t,n),t.rB?0:n.length;var r=u(k,n);if(r){var a=k;a.skip?M+=n:(a.rE||a.eE||(M+=n),b(),a.eE&&(M=n));do k.cN&&(L+=""),k.skip||(B+=k.r),k=k.parent;while(k!=r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,k))throw new Error('Illegal lexeme "'+n+'" for mode "'+(k.cN||"")+'"');return M+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var x,k=i||N,y={},L="";for(x=k;x!=N;x=x.parent)x.cN&&(L=p(x.cN,"",!0)+L);var M="",B=0;try{for(var C,j,I=0;;){if(k.t.lastIndex=I,C=k.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),x=k;x.parent;x=x.parent)x.cN&&(L+="");return{r:B,value:L,language:e,top:k}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(R);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"
    ")),e}function p(e,n,t){var r=n?x[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function h(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var h=document.createElementNS("http://www.w3.org/1999/xhtml","div");h.innerHTML=o.value,o.value=c(s,u(h),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=p(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,h)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=R[n]=t(e);r.aliases&&r.aliases.forEach(function(e){x[e]=n})}function N(){return Object.keys(R)}function w(e){return e=(e||"").toLowerCase(),R[e]||R[x[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},R={},x={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=h,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?"'}),{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{b:t.CNR}],r:0},i={cN:"meta",b:/#[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:"<",e:">",i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]}]),exports:{preprocessor:i,strings:r,k:c}}}); \ No newline at end of file +!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(//gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/i.exec(i))return w(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset"}function u(e){f+=""}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,f="",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else"start"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t";return i+=e+'">',i+n+o}function h(){if(!k.k)return n(M);var e="",t=0;k.lR.lastIndex=0;for(var r=k.lR.exec(M);r;){e+=n(M.substr(t,r.index-t));var a=g(k,r);a?(B+=a[1],e+=p(a[0],n(r[0]))):e+=n(r[0]),t=k.lR.lastIndex,r=k.lR.exec(M)}return e+n(M.substr(t))}function d(){var e="string"==typeof k.sL;if(e&&!R[k.sL])return n(M);var t=e?f(k.sL,M,!0,y[k.sL]):l(M,k.sL.length?k.sL:void 0);return k.r>0&&(B+=t.r),e&&(y[k.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=void 0!==k.sL?d():h(),M=""}function v(e,n){L+=e.cN?p(e.cN,"",!0):"",k=Object.create(e,{parent:{value:k}})}function m(e,n){if(M+=e,void 0===n)return b(),0;var t=o(n,k);if(t)return t.skip?M+=n:(t.eB&&(M+=n),b(),t.rB||t.eB||(M=n)),v(t,n),t.rB?0:n.length;var r=u(k,n);if(r){var a=k;a.skip?M+=n:(a.rE||a.eE||(M+=n),b(),a.eE&&(M=n));do k.cN&&(L+=""),k.skip||(B+=k.r),k=k.parent;while(k!=r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,k))throw new Error('Illegal lexeme "'+n+'" for mode "'+(k.cN||"")+'"');return M+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var x,k=i||N,y={},L="";for(x=k;x!=N;x=x.parent)x.cN&&(L=p(x.cN,"",!0)+L);var M="",B=0;try{for(var C,j,I=0;;){if(k.t.lastIndex=I,C=k.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),x=k;x.parent;x=x.parent)x.cN&&(L+="");return{r:B,value:L,language:e,top:k}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(R);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"
    ")),e}function p(e,n,t){var r=n?x[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function h(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var h=document.createElementNS("http://www.w3.org/1999/xhtml","div");h.innerHTML=o.value,o.value=c(s,u(h),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=p(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,h)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=R[n]=t(e);r.aliases&&r.aliases.forEach(function(e){x[e]=n})}function N(){return Object.keys(R)}function w(e){return e=(e||"").toLowerCase(),R[e]||R[x[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},R={},x={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=h,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("java",function(e){var t=e.UIR+"(<"+e.UIR+"(\\s*,\\s*"+e.UIR+")*>)?",a="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports",r="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",s={cN:"number",b:r,r:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},s,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("verilog",function(e){var n={keyword:"accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind bins binsof bit break buf|0 bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin function generate|5 genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import incdir include initial inout input inside instance int integer interconnect interface intersect join join_any join_none large let liblist library local localparam logic longint macromodule matches medium modport module nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 or output package packed parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor",literal:"null",built_in:"$finish $stop $exit $fatal $error $warning $info $realtime $time $printtimescale $bitstoreal $bitstoshortreal $itor $signed $cast $bits $stime $timeformat $realtobits $shortrealtobits $rtoi $unsigned $asserton $assertkill $assertpasson $assertfailon $assertnonvacuouson $assertoff $assertcontrol $assertpassoff $assertfailoff $assertvacuousoff $isunbounded $sampled $fell $changed $past_gclk $fell_gclk $changed_gclk $rising_gclk $steady_gclk $coverage_control $coverage_get $coverage_save $set_coverage_db_name $rose $stable $past $rose_gclk $stable_gclk $future_gclk $falling_gclk $changing_gclk $display $coverage_get_max $coverage_merge $get_coverage $load_coverage_db $typename $unpacked_dimensions $left $low $increment $clog2 $ln $log10 $exp $sqrt $pow $floor $ceil $sin $cos $tan $countbits $onehot $isunknown $fatal $warning $dimensions $right $high $size $asin $acos $atan $atan2 $hypot $sinh $cosh $tanh $asinh $acosh $atanh $countones $onehot0 $error $info $random $dist_chi_square $dist_erlang $dist_exponential $dist_normal $dist_poisson $dist_t $dist_uniform $q_initialize $q_remove $q_exam $async$and$array $async$nand$array $async$or$array $async$nor$array $sync$and$array $sync$nand$array $sync$or$array $sync$nor$array $q_add $q_full $psprintf $async$and$plane $async$nand$plane $async$or$plane $async$nor$plane $sync$and$plane $sync$nand$plane $sync$or$plane $sync$nor$plane $system $display $displayb $displayh $displayo $strobe $strobeb $strobeh $strobeo $write $readmemb $readmemh $writememh $value$plusargs $dumpvars $dumpon $dumplimit $dumpports $dumpportson $dumpportslimit $writeb $writeh $writeo $monitor $monitorb $monitorh $monitoro $writememb $dumpfile $dumpoff $dumpall $dumpflush $dumpportsoff $dumpportsall $dumpportsflush $fclose $fdisplay $fdisplayb $fdisplayh $fdisplayo $fstrobe $fstrobeb $fstrobeh $fstrobeo $swrite $swriteb $swriteh $swriteo $fscanf $fread $fseek $fflush $feof $fopen $fwrite $fwriteb $fwriteh $fwriteo $fmonitor $fmonitorb $fmonitorh $fmonitoro $sformat $sformatf $fgetc $ungetc $fgets $sscanf $rewind $ftell $ferror"};return{aliases:["v","sv","svh"],cI:!1,k:n,l:/[\w\$]+/,c:[e.CBCM,e.CLCM,e.QSM,{cN:"number",c:[e.BE],v:[{b:"\\b((\\d+'(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{b:"\\B(('(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{b:"\\b([0-9_])+",r:0}]},{cN:"variable",v:[{b:"#\\((?!parameter).+\\)"},{b:"\\.\\w+",r:0}]},{cN:"meta",b:"`",e:"$",k:{"meta-keyword":"define __FILE__ __LINE__ begin_keywords celldefine default_nettype define else elsif end_keywords endcelldefine endif ifdef ifndef include line nounconnected_drive pragma resetall timescale unconnected_drive undef undefineall"},r:0}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?"'}),{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{b:t.CNR}],r:0},i={cN:"meta",b:/#[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:"<",e:">",i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]}]),exports:{preprocessor:i,strings:r,k:c}}}); \ No newline at end of file diff --git a/doc/html-manual/hwsw-inputs.shtml b/doc/html-manual/hwsw-inputs.shtml index 5ca6fae69bc..5929350ad7d 100644 --- a/doc/html-manual/hwsw-inputs.shtml +++ b/doc/html-manual/hwsw-inputs.shtml @@ -77,7 +77,7 @@ active-low. The following C fragment drives this input to be active in the first cycle, and not active in any subsequent cycle:

    -
    top.resetn=0;
    +
      top.resetn=0;
       set_inputs(); next_timeframe();
     
       for(i=1; i<bound; i++) {
    diff --git a/doc/html-manual/hwsw-tutorial.shtml b/doc/html-manual/hwsw-tutorial.shtml
    index b981eba125d..003b41c1ad7 100644
    --- a/doc/html-manual/hwsw-tutorial.shtml
    +++ b/doc/html-manual/hwsw-tutorial.shtml
    @@ -21,8 +21,7 @@ The following Verilog module implements a 4-bit counter
     (counter.v):
     

    -
    
    -module top(input clk);
    +
    module top(input clk);
     
       reg [3:0] counter;
     
    diff --git a/doc/html-manual/satabs-aeon.shtml b/doc/html-manual/satabs-aeon.shtml
    index 0ed260ef852..049c3207027 100644
    --- a/doc/html-manual/satabs-aeon.shtml
    +++ b/doc/html-manual/satabs-aeon.shtml
    @@ -1,5 +1,9 @@
     
     
    +
    +
    +
    +
     

    CPROVER Manual TOC

    SATABS – Predicate Abstraction with SAT

    diff --git a/doc/html-manual/satabs-driver.shtml b/doc/html-manual/satabs-driver.shtml index 2efa8671892..474e59f6052 100644 --- a/doc/html-manual/satabs-driver.shtml +++ b/doc/html-manual/satabs-driver.shtml @@ -1,5 +1,9 @@ + + + +

    CPROVER Manual TOC

    SATABS – Predicate Abstraction with SAT

    From ee67a1606e0c445430a8637fd103faa1e723278d Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Mon, 13 Jun 2016 15:43:14 +0100 Subject: [PATCH 046/290] use highlight --- doc/html-manual/hwsw-inputs.shtml | 4 ++-- doc/html-manual/hwsw-tutorial.shtml | 8 +++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/doc/html-manual/hwsw-inputs.shtml b/doc/html-manual/hwsw-inputs.shtml index 5929350ad7d..9a63293ff4f 100644 --- a/doc/html-manual/hwsw-inputs.shtml +++ b/doc/html-manual/hwsw-inputs.shtml @@ -42,7 +42,7 @@ before calling next_timeframe(). Consider the following example:

    -
    void next_timeframe();
    +
    void next_timeframe();
     void set_inputs();
     extern const unsigned int bound;
     
    @@ -77,7 +77,7 @@ active-low. The following C fragment drives this input to be active in the
     first cycle, and not active in any subsequent cycle:
     

    -
      top.resetn=0;
    +
      top.resetn=0;
       set_inputs(); next_timeframe();
     
       for(i=1; i<bound; i++) {
    diff --git a/doc/html-manual/hwsw-tutorial.shtml b/doc/html-manual/hwsw-tutorial.shtml
    index 003b41c1ad7..926264d81bf 100644
    --- a/doc/html-manual/hwsw-tutorial.shtml
    +++ b/doc/html-manual/hwsw-tutorial.shtml
    @@ -41,13 +41,12 @@ fragment shows the definition of the variable that holds the value
     of the counter register:
     

    - -struct module_top { +
    struct module_top {
       unsigned int counter;
     };
     
     extern struct module_top top;
    -
    +

    Using this definition, the value of the counter register in the @@ -87,8 +86,7 @@ two values of the trace of the counter module (counter.c):

    -
    
    -void next_timeframe();
    +
    void next_timeframe();
     
     struct module_top {
       unsigned int counter;
    
    From b76ff8651254a1a53c5a8cdf4f311af74a311f97 Mon Sep 17 00:00:00 2001
    From: Daniel Kroening 
    Date: Mon, 13 Jun 2016 15:46:18 +0100
    Subject: [PATCH 047/290] use highlight
    
    ---
     doc/html-manual/modeling-pointers.shtml | 2 +-
     doc/html-manual/satabs-aeon.shtml       | 2 +-
     doc/html-manual/satabs-driver.shtml     | 5 ++---
     3 files changed, 4 insertions(+), 5 deletions(-)
    
    diff --git a/doc/html-manual/modeling-pointers.shtml b/doc/html-manual/modeling-pointers.shtml
    index 2f2f16244c4..d8cfa7f31c4 100644
    --- a/doc/html-manual/modeling-pointers.shtml
    +++ b/doc/html-manual/modeling-pointers.shtml
    @@ -40,7 +40,7 @@ pointer) is relative to the beginning of the object; it uses byte
     granularity. As an example, the code fragment
     

    -
      unsigned array[10];
    +
      unsigned array[10];
       char *p;
     
       p=(char *)(array+1);
    diff --git a/doc/html-manual/satabs-aeon.shtml b/doc/html-manual/satabs-aeon.shtml
    index 049c3207027..ac40245b830 100644
    --- a/doc/html-manual/satabs-aeon.shtml
    +++ b/doc/html-manual/satabs-aeon.shtml
    @@ -65,7 +65,7 @@ Now consider the first few lines of the main function
     of Aeon:
     

    -
    int main(int argc, char **argv)
    +
    int main(int argc, char **argv)
     {
       char settings[MAX_SETTINGS][MAX_LEN];
       ...
    diff --git a/doc/html-manual/satabs-driver.shtml b/doc/html-manual/satabs-driver.shtml
    index 474e59f6052..b4b34954986 100644
    --- a/doc/html-manual/satabs-driver.shtml
    +++ b/doc/html-manual/satabs-driver.shtml
    @@ -145,8 +145,7 @@ We use the following model checking harness for calling the
     dispatching functions:
     

    -
    
    -      random = nondet_uchar ();
    +
          random = nondet_uchar ();
           __CPROVER_assume (0 <= random && random <= 3);
     
           switch (random)
    @@ -240,7 +239,7 @@ leading to a usecount of 2. The second call of course fails
     with rval=-1, but the counter is increased nevertheless:
     

    -
    int dummy_open (struct inode *inode, struct file *filp)
    +
    int dummy_open (struct inode *inode, struct file *filp)
     {
       __CPROVER_assert(MAJOR (inode->i_rdev) == dummy_major,
           "i_rdev mismatch");
    
    From c87e55ab422768c932f1334b9c5bab014be516bd Mon Sep 17 00:00:00 2001
    From: Daniel Kroening 
    Date: Mon, 13 Jun 2016 15:56:43 +0100
    Subject: [PATCH 048/290] use highlight
    
    ---
     doc/html-manual/cprover-source.shtml | 113 +++++++++++----------------
     1 file changed, 47 insertions(+), 66 deletions(-)
    
    diff --git a/doc/html-manual/cprover-source.shtml b/doc/html-manual/cprover-source.shtml
    index 57e1b8b4e03..baa3aed6ccc 100644
    --- a/doc/html-manual/cprover-source.shtml
    +++ b/doc/html-manual/cprover-source.shtml
    @@ -1,5 +1,9 @@
     
     
    +
    +
    +
    +
     

    CPROVER Manual TOC

    The CPROVER Source Code Reference

    @@ -48,8 +52,7 @@ performed during type checking, which is done by a call to the symbolt data structure.

    -
    -#include <iostream>
    +
    #include <iostream>
     #include <fstream>
     #include <sstream>
     #include <string>
    @@ -95,7 +98,7 @@ int main(int argc, const char* argv[])
     
       return 0;
     }
    -
    +

    The parse trees are implemented using a class called irept. Its @@ -107,8 +110,7 @@ declaration and definiton can be found in the files "util/irep.h" and The code below gives some details of the class irept:

    -
    -class irept
    +
    class irept
     {
     public:
       typedef std::vector subt;
    @@ -131,7 +133,7 @@ protected:
       dt *data;
       ...
     };
    -
    +

    Every node of any tree is an object of class irept. Each node has a @@ -162,10 +164,9 @@ b;.

    is_nil and is_not_nil
    -
    -virtual bool is_nil() const;
    +
    virtual bool is_nil() const;
     virtual bool is_not_nil() const;
    -
    +

    The first method returns true if the label of the node is equal to "nil". @@ -174,10 +175,9 @@ The second method returns false if the label of the node is equal to "nil".

    id
    -
    -const irep_idt &id();
    +
    const irep_idt &id();
     void id(const irep_idt &_data);
    -
    +

    The first method returns a constant reference to the label of the node. The @@ -186,11 +186,10 @@ second method sets the label of the node.

    find, add and get
    -
    -const irept &find(const irep_namet &name) const;
    +
    const irept &find(const irep_namet &name) const;
     irept &add(const irep_namet &name);
     const irep_idt &get(const irep_namet &name) const;
    -
    +
      @@ -213,12 +212,11 @@ string is returned.
      set
      -
      -void set(const irep_namet &name,
      +
      void set(const irep_namet &name,
                const irep_idt &value);
       void set(const irep_namet &name, const long value);
       void set(const irep_namet &name, const irept &irep);
      -
      +

      These methods create a new edge with label name. @@ -237,9 +235,8 @@ string and set as node-label of the new child.

      remove
      -
      -void remove(const irep_namet &name);
      -
      +
      void remove(const irep_namet &name);
      +

      This method looks for an edge with label name @@ -247,10 +244,9 @@ and removes it.

      move_to_sub and move_to_named_sub
      -
      -void move_to_sub(irept &irep);
      +
      void move_to_sub(irept &irep);
       void move_to_named_sub(const irep_namet &name, irept &irep);
      -
      +

      The first method creates a new ordered edge with a child equal to @@ -264,9 +260,8 @@ The second method does the same but for labeled edges.

      swap
      -
      -void swap(irept &irep);
      -
      +
      void swap(irept &irep);
      +

      Exchange the content of the invoked node with the one of irep. @@ -274,9 +269,8 @@ Exchange the content of the invoked node with the one of irep.

      make_nil
      -
      -void make_nil();
      -
      +
      void make_nil();
      +

      Set the label of the node to "nil" and remove all outgoing edges. @@ -284,11 +278,10 @@ Set the label of the node to "nil" and remove all outgoing edges.

      get_sub and get_named_sub and get_comments
      -
      -const subt &get_sub();
      +
      const subt &get_sub();
       const named_subt &get_named_sub();
       const named_subt &get_comments();
      -
      +

      Return a constant reference to @@ -308,10 +301,9 @@ information to the interface of irept.

      has_subtype and has_subtypes
      -
      -bool has_subtype() const;
      +
      bool has_subtype() const;
       bool has_subtypes() const;
      -
      +

      The first method returns true if the a subtype node exists. is not @@ -320,8 +312,7 @@ The first method returns true if the a subtype node exists. is not

      subtype and subtypes
      -
      -typet &subtype();
      +
      typet &subtype();
       typest &subtypes();
       
      @@ -400,16 +391,14 @@ interface of irept.
      constructors
      -
      -explicit exprt(const irep_idt &id);
      -
      +
      explicit exprt(const irep_idt &id);
      +

      Creates an exprt object with a given label and no type.

      -
      -exprt(const irep_idt &id, const typet &type);
      +
      exprt(const irep_idt &id, const typet &type);
       

      @@ -418,8 +407,7 @@ Creates an exprt object with a given label and type.

      type
      -
      -const typet &type() const;
      +
      const typet &type() const;
       typet &type();
       
      @@ -429,9 +417,8 @@ Return a reference to the 'type' node
      has_operands
      -
      -bool has_operands() const;
      -
      +
      bool has_operands() const;
      +

      Return true if the expression has operands. @@ -439,16 +426,14 @@ Return true if the expression has operands.

      operands
      -
      -const operandst &operands() const;
      -
      +
      const operandst &operands() const;
      +

      Return a reference to the vector of operands.

      -
      -const exprt &op0();
      +
      const exprt &op0();
       const exprt &op1();
       const exprt &op2();
       const exprt &op3();
      @@ -456,7 +441,7 @@ exprt &op0();
       exprt &op1();
       exprt &op2();
       exprt &op3();
      -
      +

      Return a reference to a specific operand. @@ -464,11 +449,10 @@ Return a reference to a specific operand.

      Constructing common expressions
      -
      -void make_true();
      +
      void make_true();
       void make_false();
       void make_bool(bool value);
      -
      +

      Turn the current exprt instance into a expression of type "bool" @@ -476,9 +460,8 @@ with label "constant" and a single edge labeled "value", which points to a new node with label either "true" or "false".

      -
      -void make_typecast(const typet &_type);
      -
      +
      void make_typecast(const typet &_type);
      +

      Turns the current exprt instance into a typecast. The old value of @@ -486,9 +469,8 @@ the instance is appended as the single operand of the typecast, i.e., the result is a typecast-expression of the old expression to the indicated type.

      -
      -void make_not();
      -
      +
      void make_not();
      +

      Turns the current exprt instance into an expression with label @@ -778,8 +760,7 @@ The following code segment shows a partial interface declaration of goto_program_template and instructiont.

      -
      -template <class codeT, class guardT>
      +
      template <class codeT, class guardT>
       class goto_program_templatet
       {
       public:
      @@ -845,7 +826,7 @@ public:
         };
       
       }
      -
      +
      (T)((size_t)x + (size_t)y) + // + if((expr_type.id()==ID_signedbv || expr_type.id()==ID_unsignedbv) && + op_type.id()==ID_pointer && + expr.op0().id()==ID_plus) + { + const mp_integer step=pointer_offset_size(op_type.subtype(), ns); + + if(step>0) + { + const unsignedbv_typet size_t_type(config.ansi_c.pointer_width); + expr.op0().type()=size_t_type; + + Forall_operands(it, expr.op0()) + { + it->make_typecast(size_t_type); + + if(step>1 && + it->type().id()!=ID_pointer) + *it=mult_exprt(from_integer(step, size_t_type), *it); + } + + simplify_rec(expr); + return false; + } + } + #if 0 // (T)(a?b:c) --> a?(T)b:(T)c if(expr.op0().id()==ID_if && From 9c3311e4592d6f3c486d1631133094101caf9512 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Sat, 27 Feb 2016 17:15:07 +0000 Subject: [PATCH 149/290] Preparing typing of simplify_if, use lift_if --- src/util/simplify_expr.cpp | 6 +++--- src/util/simplify_expr_array.cpp | 7 +----- src/util/simplify_expr_int.cpp | 34 +++++++++--------------------- src/util/simplify_expr_pointer.cpp | 34 +++++++++--------------------- 4 files changed, 24 insertions(+), 57 deletions(-) diff --git a/src/util/simplify_expr.cpp b/src/util/simplify_expr.cpp index 168e3fae1c1..fbdb46b1508 100644 --- a/src/util/simplify_expr.cpp +++ b/src/util/simplify_expr.cpp @@ -452,7 +452,7 @@ bool simplify_exprt::simplify_typecast(exprt &expr) simplify_typecast(tmp_op1); simplify_typecast(tmp_op2); expr=if_exprt(expr.op0().op0(), tmp_op1, tmp_op2, expr_type); - simplify_if(expr); + simplify_if(to_if_expr(expr)); return false; } #endif @@ -764,7 +764,7 @@ bool simplify_exprt::simplify_dereference(exprt &expr) expr=if_exprt(if_expr.cond(), tmp_op1, tmp_op2); - simplify_if(expr); + simplify_if(to_if_expr(expr)); return false; } @@ -2396,7 +2396,7 @@ bool simplify_exprt::simplify_node(exprt &expr) expr.id()==ID_ge || expr.id()==ID_le) result=simplify_inequality(expr) && result; else if(expr.id()==ID_if) - result=simplify_if(expr) && result; + result=simplify_if(to_if_expr(expr)) && result; else if(expr.id()==ID_lambda) result=simplify_lambda(expr) && result; else if(expr.id()==ID_with) diff --git a/src/util/simplify_expr_array.cpp b/src/util/simplify_expr_array.cpp index b1d9db1bb6b..298ca3eb195 100644 --- a/src/util/simplify_expr_array.cpp +++ b/src/util/simplify_expr_array.cpp @@ -117,12 +117,7 @@ bool simplify_exprt::simplify_index(exprt &expr) return false; } - exprt if_expr(ID_if, expr.type()); - if_expr.reserve_operands(3); - if_expr.move_to_operands(equality_expr); - if_expr.copy_to_operands(with_expr.op2()); - if_expr.move_to_operands(new_index_expr); - + if_exprt if_expr(equality_expr, with_expr.op2(), new_index_expr); simplify_if(if_expr); expr.swap(if_expr); diff --git a/src/util/simplify_expr_int.cpp b/src/util/simplify_expr_int.cpp index 1d063175860..22b896c39e9 100644 --- a/src/util/simplify_expr_int.cpp +++ b/src/util/simplify_expr_int.cpp @@ -1271,18 +1271,11 @@ bool simplify_exprt::simplify_inequality(exprt &expr) if(tmp0.id()==ID_if && tmp0.operands().size()==3) { - const if_exprt &if_expr=to_if_expr(tmp0); - - exprt tmp_op1=expr; - tmp_op1.op0()=if_expr.true_case(); - simplify_inequality(tmp_op1); - exprt tmp_op2=expr; - tmp_op2.op0()=if_expr.false_case(); - simplify_inequality(tmp_op2); - - expr=if_exprt(if_expr.cond(), tmp_op1, tmp_op2); - - simplify_if(expr); + if_exprt if_expr=lift_if(expr, 0); + simplify_inequality(if_expr.true_case()); + simplify_inequality(if_expr.false_case()); + simplify_if(if_expr); + expr.swap(if_expr); return false; } @@ -1680,18 +1673,11 @@ bool simplify_exprt::simplify_inequality_constant(exprt &expr) if(expr.op0().id()==ID_if && expr.op0().operands().size()==3) { - const if_exprt &if_expr=to_if_expr(expr.op0()); - - exprt tmp_op1=expr; - tmp_op1.op0()=if_expr.true_case(); - simplify_inequality_constant(tmp_op1); - exprt tmp_op2=expr; - tmp_op2.op0()=if_expr.false_case(); - simplify_inequality_constant(tmp_op2); - - expr=if_exprt(if_expr.cond(), tmp_op1, tmp_op2); - - simplify_if(expr); + if_exprt if_expr=lift_if(expr, 0); + simplify_inequality_constant(if_expr.true_case()); + simplify_inequality_constant(if_expr.false_case()); + simplify_if(if_expr); + expr.swap(if_expr); return false; } diff --git a/src/util/simplify_expr_pointer.cpp b/src/util/simplify_expr_pointer.cpp index 824655443f6..307104e675c 100644 --- a/src/util/simplify_expr_pointer.cpp +++ b/src/util/simplify_expr_pointer.cpp @@ -258,18 +258,11 @@ bool simplify_exprt::simplify_pointer_offset(exprt &expr) if(ptr.id()==ID_if && ptr.operands().size()==3) { - const if_exprt &if_expr=to_if_expr(ptr); - - exprt tmp_op1=expr; - tmp_op1.op0()=if_expr.true_case(); - simplify_pointer_offset(tmp_op1); - exprt tmp_op2=expr; - tmp_op2.op0()=if_expr.false_case(); - simplify_pointer_offset(tmp_op2); - - expr=if_exprt(if_expr.cond(), tmp_op1, tmp_op2); - - simplify_if(expr); + if_exprt if_expr=lift_if(expr, 0); + simplify_pointer_offset(if_expr.true_case()); + simplify_pointer_offset(if_expr.false_case()); + simplify_if(if_expr); + expr.swap(if_expr); return false; } @@ -583,18 +576,11 @@ bool simplify_exprt::simplify_dynamic_object(exprt &expr) if(op.id()==ID_if && op.operands().size()==3) { - const if_exprt &if_expr=to_if_expr(op); - - exprt tmp_op1=expr; - tmp_op1.op0()=if_expr.true_case(); - simplify_dynamic_object(tmp_op1); - exprt tmp_op2=expr; - tmp_op2.op0()=if_expr.false_case(); - simplify_dynamic_object(tmp_op2); - - expr=if_exprt(if_expr.cond(), tmp_op1, tmp_op2); - - simplify_if(expr); + if_exprt if_expr=lift_if(expr, 0); + simplify_dynamic_object(if_expr.true_case()); + simplify_dynamic_object(if_expr.false_case()); + simplify_if(if_expr); + expr.swap(if_expr); return false; } From a9e8b9c1c3fbf7e80b5f8927a18a095ee77b814b Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Sat, 27 Feb 2016 17:17:05 +0000 Subject: [PATCH 150/290] New implementation of (still disabled) expression replacement in simplify_if --- src/util/simplify_expr.cpp | 174 +++++++++++++++++++++++---------- src/util/simplify_expr_class.h | 6 +- 2 files changed, 129 insertions(+), 51 deletions(-) diff --git a/src/util/simplify_expr.cpp b/src/util/simplify_expr.cpp index fbdb46b1508..c45ae848674 100644 --- a/src/util/simplify_expr.cpp +++ b/src/util/simplify_expr.cpp @@ -1106,7 +1106,7 @@ bool simplify_exprt::simplify_if_cond(exprt &expr) /*******************************************************************\ -Function: simplify_exprt::simplify_if +Function: simplify_exprt::simplify_if_preorder Inputs: @@ -1116,25 +1116,24 @@ Function: simplify_exprt::simplify_if \*******************************************************************/ -bool simplify_exprt::simplify_if(exprt &expr) +bool simplify_exprt::simplify_if_preorder(if_exprt &expr) { - exprt::operandst &operands=expr.operands(); - if(operands.size()!=3) return true; + exprt &cond=expr.cond(); + exprt &truevalue=expr.true_case(); + exprt &falsevalue=expr.false_case(); - exprt &cond=operands[0]; - exprt &truevalue=operands[1]; - exprt &falsevalue=operands[2]; + // we first want to look at the condition + bool result=simplify_rec(cond); - if(truevalue==falsevalue) + // 1 ? a : b -> a and 0 ? a : b -> b + if(cond.is_constant()) { - exprt tmp; - tmp.swap(truevalue); + exprt tmp=cond.is_true()?truevalue:falsevalue; + simplify_rec(tmp); expr.swap(tmp); return false; } - bool result=true; - if(do_simplify_if) { if(cond.id()==ID_not) @@ -1146,6 +1145,84 @@ bool simplify_exprt::simplify_if(exprt &expr) result=false; } + #if 0 + replace_mapt map_before(local_replace_map); + + // a ? b : c --> a ? b[a/true] : c + if(cond.id()==ID_and) + { + forall_operands(it, cond) + { + if(it->id()==ID_not) + local_replace_map.insert( + std::make_pair(it->op0(), false_exprt())); + else + local_replace_map.insert( + std::make_pair(*it, true_exprt())); + } + } + else + local_replace_map.insert(std::make_pair(cond, true_exprt())); + + result=simplify_rec(truevalue) && result; + + local_replace_map=map_before; + + // a ? b : c --> a ? b : c[a/false] + if(cond.id()==ID_or) + { + forall_operands(it, cond) + { + if(it->id()==ID_not) + local_replace_map.insert( + std::make_pair(it->op0(), true_exprt())); + else + local_replace_map.insert( + std::make_pair(*it, false_exprt())); + } + } + else + local_replace_map.insert(std::make_pair(cond, false_exprt())); + + result=simplify_rec(falsevalue) && result; + + local_replace_map.swap(map_before); + #else + result=simplify_rec(truevalue) && result; + result=simplify_rec(falsevalue) && result; + #endif + } + else + { + result=simplify_rec(truevalue) && result; + result=simplify_rec(falsevalue) && result; + } + + return result; +} + +/*******************************************************************\ + +Function: simplify_exprt::simplify_if + + Inputs: + + Outputs: + + Purpose: + +\*******************************************************************/ + +bool simplify_exprt::simplify_if(if_exprt &expr) +{ + exprt &cond=expr.cond(); + exprt &truevalue=expr.true_case(); + exprt &falsevalue=expr.false_case(); + + bool result=true; + + if(do_simplify_if) + { #if 0 result = simplify_if_cond(cond) && result; result = simplify_if_branch(truevalue, falsevalue, cond) && result; @@ -1210,23 +1287,9 @@ bool simplify_exprt::simplify_if(exprt &expr) return false; } } - - #if 0 - // a ? b : c --> a ? b[a/true] : c - exprt tmp_true=truevalue; - replace_expr(cond, true_exprt(), tmp_true); - if(tmp_true!=truevalue) - { truevalue=tmp_true; simplify_rec(truevalue); result=false; } - - // a ? b : c --> a ? b : c[a/false] - exprt tmp_false=falsevalue; - replace_expr(cond, false_exprt(), tmp_false); - if(tmp_false!=falsevalue) - { falsevalue=tmp_false; simplify_rec(falsevalue); result=false; } - #endif } - if(cond.is_true()) + if(truevalue==falsevalue) { exprt tmp; tmp.swap(truevalue); @@ -1234,11 +1297,24 @@ bool simplify_exprt::simplify_if(exprt &expr) return false; } - if(cond.is_false()) + if(((truevalue.id()==ID_struct && falsevalue.id()==ID_struct) || + (truevalue.id()==ID_array && falsevalue.id()==ID_array)) && + truevalue.operands().size()==falsevalue.operands().size()) { - exprt tmp; - tmp.swap(falsevalue); - expr.swap(tmp); + exprt cond_copy=cond; + exprt falsevalue_copy=falsevalue; + expr.swap(truevalue); + + exprt::operandst::const_iterator f_it= + falsevalue_copy.operands().begin(); + Forall_operands(it, expr) + { + if_exprt if_expr(cond_copy, *it, *f_it); + it->swap(if_expr); + simplify_if(to_if_expr(*it)); + ++f_it; + } + return false; } @@ -2331,25 +2407,7 @@ bool simplify_exprt::simplify_node_preorder(exprt &expr) // the argument of this expression needs special treatment } else if(expr.id()==ID_if) - { - // we first want to look at the condition - if_exprt &if_expr=to_if_expr(expr); - if(!simplify_rec(if_expr.cond())) result=false; - - // 1 ? a : b -> a and 0 ? a : b -> b - if(if_expr.cond().is_constant()) - { - expr=if_expr.cond().is_true()? - if_expr.true_case():if_expr.false_case(); - simplify_rec(expr); - result=false; - } - else - { - if(!simplify_rec(if_expr.true_case())) result=false; - if(!simplify_rec(if_expr.false_case())) result=false; - } - } + result=simplify_if_preorder(to_if_expr(expr)); else { if(expr.has_operands()) @@ -2545,6 +2603,22 @@ bool simplify_exprt::simplify_rec(exprt &expr) if(!simplify_node(tmp)) result=false; + #if 1 + replace_mapt::const_iterator it=local_replace_map.find(tmp); + if(it!=local_replace_map.end()) + { + tmp=it->second; + result=false; + } + #else + if(!local_replace_map.empty() && + !replace_expr(local_replace_map, tmp)) + { + simplify_rec(tmp); + result=false; + } + #endif + if(!result) { expr.swap(tmp); diff --git a/src/util/simplify_expr_class.h b/src/util/simplify_expr_class.h index 069dd930684..286432be988 100644 --- a/src/util/simplify_expr_class.h +++ b/src/util/simplify_expr_class.h @@ -19,10 +19,12 @@ Author: Daniel Kroening, kroening@kroening.com #include "type.h" #include "mp_arith.h" +#include "replace_expr.h" class byte_extract_exprt; class byte_update_exprt; class exprt; +class if_exprt; class index_exprt; class member_exprt; class namespacet; @@ -70,7 +72,8 @@ class simplify_exprt bool simplify_floatbv_typecast(exprt &expr); bool simplify_shifts(exprt &expr); bool simplify_bitwise(exprt &expr); - bool simplify_if(exprt &expr); + bool simplify_if_preorder(if_exprt &expr); + bool simplify_if(if_exprt &expr); bool simplify_bitnot(exprt &expr); bool simplify_not(exprt &expr); bool simplify_boolean(exprt &expr); @@ -145,6 +148,7 @@ class simplify_exprt #ifdef DEBUG_ON_DEMAND bool debug_on; #endif + replace_mapt local_replace_map; }; #endif From d534e99e013daf68b868c26b54c27c490a53f5a0 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Fri, 4 Mar 2016 02:18:30 +0000 Subject: [PATCH 151/290] simplify/byte_extract bugfixes --- src/util/simplify_expr.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/util/simplify_expr.cpp b/src/util/simplify_expr.cpp index c45ae848674..3c93361353c 100644 --- a/src/util/simplify_expr.cpp +++ b/src/util/simplify_expr.cpp @@ -1676,7 +1676,11 @@ exprt simplify_exprt::bits2expr( return constant_exprt(tmp, type); } else if(type.id()==ID_c_enum) - return constant_exprt(bits, type); + { + exprt val=bits2expr(bits, type.subtype(), little_endian); + val.type()=type; + return val; + } else if(type.id()==ID_c_enum_tag) return bits2expr( @@ -1925,10 +1929,8 @@ bool simplify_exprt::simplify_byte_extract(byte_extract_exprt &expr) // no proper simplification for expr.type()==void // or types of unknown size - if(expr.type().id()==ID_empty || - el_size<0) + if(el_size<=0) return true; - assert(el_size>0); if(expr.op().id()==ID_array_of && expr.op().op0().id()==ID_constant) From add43dd8cef2b8d6e28d4bb535494ead96f8dc6c Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Tue, 21 Jun 2016 07:18:05 +0000 Subject: [PATCH 152/290] Build symex --- src/Makefile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Makefile b/src/Makefile index ea91dcf9c98..1db144e1da7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,9 +1,9 @@ DIRS = ansi-c big-int cbmc cpp goto-cc goto-instrument goto-programs \ goto-symex langapi pointer-analysis solvers util linking xmllang \ assembler analyses java_bytecode aa-path-symex path-symex musketeer \ - json cegis goto-analyzer jsil + json cegis goto-analyzer jsil symex -all: cbmc.dir goto-cc.dir goto-instrument.dir path-symex.dir goto-analyzer.dir +all: cbmc.dir goto-cc.dir goto-instrument.dir symex.dir goto-analyzer.dir ############################################################################### @@ -36,6 +36,10 @@ goto-analyzer.dir: languages analyses.dir goto-programs.dir linking.dir \ goto-cc.dir: languages pointer-analysis.dir goto-programs.dir linking.dir +symex.dir: languages goto-programs.dir pointer-analysis.dir \ + goto-symex.dir linking.dir analyses.dir solvers.dir \ + path-symex.dir + # building for a particular directory $(patsubst %, %.dir, $(DIRS)): From cc91d1a1ea744e681862c9135bfde0219d53797f Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Tue, 21 Jun 2016 12:03:11 +0100 Subject: [PATCH 153/290] fix the test --- regression/cbmc/null3/test.desc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regression/cbmc/null3/test.desc b/regression/cbmc/null3/test.desc index 1f866b55357..751e49c55dc 100644 --- a/regression/cbmc/null3/test.desc +++ b/regression/cbmc/null3/test.desc @@ -3,7 +3,7 @@ main.c ^EXIT=0$ ^SIGNAL=0$ -\(Starting CEGAR Loop\|^Generated 0 VCC(s), 0 remaining after simplification$\) +^Generated 1 VCC(s), 0 remaining after simplification$ ^VERIFICATION SUCCESSFUL$ -- ^warning: ignoring From 91e3628297ab33d0f529061a423b1fc04a38bc34 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Tue, 21 Jun 2016 13:36:21 +0100 Subject: [PATCH 154/290] make library_check work again --- src/ansi-c/library/pthread_lib.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ansi-c/library/pthread_lib.c b/src/ansi-c/library/pthread_lib.c index c7629f3d120..b3d6d3a8a10 100644 --- a/src/ansi-c/library/pthread_lib.c +++ b/src/ansi-c/library/pthread_lib.c @@ -344,6 +344,7 @@ inline int pthread_join(pthread_t thread, void **value_ptr) #define __CPROVER_ERRNO_H_INCLUDED #endif +#ifdef __APPLE_ extern __CPROVER_bool __CPROVER_threads_exited[]; extern __CPROVER_thread_local unsigned long __CPROVER_thread_id; extern unsigned long __CPROVER_next_thread_id; @@ -364,6 +365,7 @@ inline int pthread_join(pthread_t thread, void **value_ptr) return 0; } +#endif /* FUNCTION: pthread_rwlock_destroy */ From fede5af3fcd7a827ff1161e12a8fc5f503230fd1 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Tue, 14 Jun 2016 09:42:45 +0000 Subject: [PATCH 155/290] GCC asm labels need to be considered when listing undefined functions --- src/goto-instrument/goto_instrument_parse_options.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/goto-instrument/goto_instrument_parse_options.cpp b/src/goto-instrument/goto_instrument_parse_options.cpp index 6526d29ac2c..4e04cf172ab 100644 --- a/src/goto-instrument/goto_instrument_parse_options.cpp +++ b/src/goto-instrument/goto_instrument_parse_options.cpp @@ -476,8 +476,11 @@ int goto_instrument_parse_optionst::doit() if(cmdline.isset("list-undefined-functions")) { + const namespacet ns(symbol_table); + Forall_goto_functions(it, goto_functions) - if(!it->second.body_available()) + if(!ns.lookup(it->first).is_macro && + !it->second.body_available()) std::cout << it->first << std::endl; return 0; } From 2a5cac178e16fb186608a0fdf146cad9a503ad77 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Tue, 21 Jun 2016 09:20:14 -0400 Subject: [PATCH 156/290] Parse KnR functions returning function pointers Fixes #133 --- regression/ansi-c/KnR3/test.desc | 2 +- src/ansi-c/parser.y | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/regression/ansi-c/KnR3/test.desc b/regression/ansi-c/KnR3/test.desc index fc2b1874059..466da18b2b5 100644 --- a/regression/ansi-c/KnR3/test.desc +++ b/regression/ansi-c/KnR3/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +CORE main.c ^EXIT=0$ diff --git a/src/ansi-c/parser.y b/src/ansi-c/parser.y index bfb853f67d8..ec697346098 100644 --- a/src/ansi-c/parser.y +++ b/src/ansi-c/parser.y @@ -3134,7 +3134,7 @@ parameter_postfixing_abstract_declarator: id2string(PARSER.current_scope().last_declarator)+"::"); } parameter_type_list - ')' + ')' KnR_parameter_header_opt { $$=$1; set($$, ID_code); @@ -3142,6 +3142,12 @@ parameter_postfixing_abstract_declarator: stack_type($$).add(ID_parameters).get_sub(). swap((irept::subt &)(stack_type($3).subtypes())); PARSER.pop_scope(); + + if(stack($5).is_not_nil()) + { + adjust_KnR_parameters(stack($$).add(ID_parameters), stack($5)); + stack($$).set(ID_C_KnR, true); + } } ; From 77a268567ef7350df8af4f660c4698b205c62842 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Tue, 21 Jun 2016 08:40:12 -0400 Subject: [PATCH 157/290] Fix type checking of ?: when one operand is void* The C standard requires that types are compatible. For the case of void* vs. some other pointer type, GCC uses the other pointer type if, and only if, the void* operand is NULL. Fixes #134 --- regression/ansi-c/gcc_builtins2/test.desc | 2 +- regression/ansi-c/gcc_builtins5/main.c | 56 +++++++++++++++++++++++ regression/ansi-c/gcc_builtins5/test.desc | 8 ++++ src/ansi-c/c_typecast.cpp | 4 ++ src/ansi-c/c_typecheck_expr.cpp | 14 ++++-- src/util/simplify_expr.cpp | 8 ++++ 6 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 regression/ansi-c/gcc_builtins5/main.c create mode 100644 regression/ansi-c/gcc_builtins5/test.desc diff --git a/regression/ansi-c/gcc_builtins2/test.desc b/regression/ansi-c/gcc_builtins2/test.desc index fc2b1874059..466da18b2b5 100644 --- a/regression/ansi-c/gcc_builtins2/test.desc +++ b/regression/ansi-c/gcc_builtins2/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +CORE main.c ^EXIT=0$ diff --git a/regression/ansi-c/gcc_builtins5/main.c b/regression/ansi-c/gcc_builtins5/main.c new file mode 100644 index 00000000000..c1c5d6fb85b --- /dev/null +++ b/regression/ansi-c/gcc_builtins5/main.c @@ -0,0 +1,56 @@ +typedef unsigned long int uintptr_t; +typedef unsigned long int uint64_t; +typedef long int __intptr_t; + +typedef struct +{ + uintptr_t stack_guard; +} tcbhead_t; + +struct pthread +{ + union + { + tcbhead_t header; + }; +}; + +#define STATIC_ASSERT(a) int __dummy__[(a)?1:-1] + +int main() +{ + uintptr_t stack_chk_guard; + STATIC_ASSERT(!(__builtin_classify_type ((__typeof__ (stack_chk_guard)) 0) == 5)); + + __typeof__((__typeof__ ( + 0 ? + (__typeof__ ( + (__typeof__ (stack_chk_guard)) 0) *) 0 : + (void *) ( + (__builtin_classify_type ( + (__typeof__ (stack_chk_guard)) 0) == 5)) + )) 0) p1; + if(*p1<0) + return 0; + + asm volatile ("movq %q0,%%fs:%P1" : : + "ir" ((uint64_t) ( + (__typeof__ ( + *(0 ? + (__typeof__ ( + 0 ? + (__typeof__ ( + (__typeof__ (stack_chk_guard)) 0) *) 0 : + (void *) ( + (__builtin_classify_type ( + (__typeof__ (stack_chk_guard)) 0) == 5)) + )) 0 : + (__typeof__ ( + 0 ? + (__intptr_t *) 0 : + (void *) ( + !((__builtin_classify_type ((__typeof__ (stack_chk_guard)) 0) == 5)) + )) + ) 0))) (stack_chk_guard))), + "i" (__builtin_offsetof (struct pthread, header.stack_guard))); +} diff --git a/regression/ansi-c/gcc_builtins5/test.desc b/regression/ansi-c/gcc_builtins5/test.desc new file mode 100644 index 00000000000..466da18b2b5 --- /dev/null +++ b/regression/ansi-c/gcc_builtins5/test.desc @@ -0,0 +1,8 @@ +CORE +main.c + +^EXIT=0$ +^SIGNAL=0$ +-- +^warning: ignoring +^CONVERSION ERROR$ diff --git a/src/ansi-c/c_typecast.cpp b/src/ansi-c/c_typecast.cpp index 2337caacfd1..6e8f432711e 100644 --- a/src/ansi-c/c_typecast.cpp +++ b/src/ansi-c/c_typecast.cpp @@ -794,6 +794,9 @@ void c_typecastt::implicit_typecast_arithmetic( implicit_typecast_arithmetic(expr1, max_type); implicit_typecast_arithmetic(expr2, max_type); + // arithmetic typecasts only, otherwise this can't be used from + // typecheck_expr_trinary + #if 0 if(max_type==PTR) { if(c_type1==VOIDPTR) @@ -802,6 +805,7 @@ void c_typecastt::implicit_typecast_arithmetic( if(c_type2==VOIDPTR) do_typecast(expr2, expr1.type()); } + #endif } /*******************************************************************\ diff --git a/src/ansi-c/c_typecheck_expr.cpp b/src/ansi-c/c_typecheck_expr.cpp index 98d82f8220e..45e04a9df50 100644 --- a/src/ansi-c/c_typecheck_expr.cpp +++ b/src/ansi-c/c_typecheck_expr.cpp @@ -1762,10 +1762,18 @@ void c_typecheck_baset::typecheck_expr_trinary(if_exprt &expr) operands[2].type().id()==ID_pointer && operands[1].type()!=operands[2].type()) { - // is one of them void *? Convert that to the other. - if(operands[1].type().subtype().id()==ID_empty) + exprt tmp1=simplify_expr(operands[1], *this); + exprt tmp2=simplify_expr(operands[2], *this); + + // is one of them void * AND null? Convert that to the other. + // (at least that's how GCC behaves) + if(operands[1].type().subtype().id()==ID_empty && + tmp1.is_constant() && + to_constant_expr(tmp1).get_value()==ID_NULL) implicit_typecast(operands[1], operands[2].type()); - else if(operands[2].type().subtype().id()==ID_empty) + else if(operands[2].type().subtype().id()==ID_empty && + tmp2.is_constant() && + to_constant_expr(tmp2).get_value()==ID_NULL) implicit_typecast(operands[2], operands[1].type()); else if(operands[1].type().subtype().id()!=ID_code || operands[2].type().subtype().id()!=ID_code) diff --git a/src/util/simplify_expr.cpp b/src/util/simplify_expr.cpp index 3c93361353c..5020d40c45e 100644 --- a/src/util/simplify_expr.cpp +++ b/src/util/simplify_expr.cpp @@ -534,6 +534,14 @@ bool simplify_exprt::simplify_typecast(exprt &expr) return false; } } + else if(expr_type_id==ID_pointer && + operand.is_false() && + config.ansi_c.NULL_is_zero) + { + expr=gen_zero(expr_type); + assert(expr.is_not_nil()); + return false; + } } else if(op_type_id==ID_unsignedbv || op_type_id==ID_signedbv || From 4b84909da42fe4e850aafa83e55da5ae62f75451 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 1 Jul 2016 16:52:59 +0200 Subject: [PATCH 158/290] 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 159/290] 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 160/290] 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 161/290] 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 162/290] 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 163/290] 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 164/290] 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 165/290] 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 166/290] 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 167/290] 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 168/290] 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 169/290] 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 170/290] 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 171/290] 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 172/290] 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 173/290] 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 174/290] 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 175/290] 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 176/290] 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 177/290] 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 178/290] 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 179/290] 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 180/290] 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 181/290] 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 182/290] 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 183/290] 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 184/290] 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 185/290] 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 186/290] 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 187/290] 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 188/290] 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 189/290] 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 190/290] 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 191/290] 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 192/290] 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 193/290] 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 194/290] 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 195/290] 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 196/290] 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 197/290] 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 198/290] 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 199/290] 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 200/290] 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 201/290] 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 202/290] 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 203/290] 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 204/290] 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 205/290] 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 206/290] 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 207/290] 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 208/290] 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 209/290] 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 210/290] 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 211/290] 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 212/290] 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 213/290] 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 214/290] 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 215/290] 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 216/290] 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 217/290] 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 218/290] 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 219/290] 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 220/290] 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 221/290] 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 222/290] 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 223/290] 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 224/290] 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 225/290] 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 226/290] 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 227/290] 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 228/290] 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 229/290] 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 230/290] 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 231/290] 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 232/290] 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 233/290] 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 234/290] 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 235/290] 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 236/290] 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 237/290] 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 238/290] 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 239/290] 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 240/290] 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 241/290] 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 242/290] 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 243/290] 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 244/290] 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 245/290] 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 246/290] 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 247/290] 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 248/290] 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 249/290] 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 250/290] 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 251/290] 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 252/290] 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 253/290] 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 254/290] 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 255/290] 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 256/290] 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 257/290] 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 258/290] 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 259/290] 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 260/290] 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 261/290] 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 262/290] 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 263/290] 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 264/290] 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 265/290] 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 266/290] 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 267/290] 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 268/290] 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 269/290] 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 270/290] 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 271/290] 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 272/290] 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 273/290] 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 274/290] 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 275/290] 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 276/290] 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 277/290] 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 278/290] 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 279/290] 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 280/290] 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 281/290] 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 b949db31d577443a7ccc469306f762988c087ad6 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 14 Oct 2016 15:34:43 +0100 Subject: [PATCH 282/290] merge main branch with string solver --- src/Makefile | 10 - src/goto-programs/interpreter.cpp | 566 +------------------ src/solvers/refinement/string_expr.cpp | 116 ++-- src/solvers/refinement/string_expr.h | 2 +- src/solvers/refinement/string_refinement.cpp | 43 +- 5 files changed, 110 insertions(+), 627 deletions(-) diff --git a/src/Makefile b/src/Makefile index 66b4e90a970..72fff91a879 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,15 +1,9 @@ DIRS = ansi-c big-int cbmc cpp goto-cc goto-instrument goto-programs \ goto-symex langapi pointer-analysis solvers util linking xmllang \ assembler analyses java_bytecode aa-path-symex path-symex musketeer \ -<<<<<<< HEAD - json cegis goto-analyzer jsil symex - -all: cbmc.dir goto-cc.dir goto-instrument.dir symex.dir goto-analyzer.dir -======= json cegis goto-analyzer jsil symex goto-diff all: cbmc.dir goto-cc.dir goto-instrument.dir symex.dir goto-analyzer.dir goto-diff.dir ->>>>>>> origin/sat-strings ############################################################################### @@ -47,11 +41,7 @@ goto-cc.dir: languages pointer-analysis.dir goto-programs.dir linking.dir symex.dir: languages goto-programs.dir pointer-analysis.dir \ goto-symex.dir linking.dir analyses.dir solvers.dir \ -<<<<<<< HEAD - path-symex.dir -======= path-symex.dir goto-instrument.dir ->>>>>>> origin/sat-strings # building for a particular directory diff --git a/src/goto-programs/interpreter.cpp b/src/goto-programs/interpreter.cpp index 388796a5f0d..7039d376da9 100644 --- a/src/goto-programs/interpreter.cpp +++ b/src/goto-programs/interpreter.cpp @@ -9,18 +9,10 @@ Author: Daniel Kroening, kroening@kroening.com #include #include #include -#include #include -#include #include #include -#include -#include -#include -#include -#include -#include #include "interpreter.h" #include "interpreter_class.h" @@ -39,48 +31,6 @@ Function: interpretert::operator() void interpretert::operator()() { - show=true; - initialise(true); - try { - std::cout << "Initialize:"; - - std::cout << "Type h for help" << std::endl; - while(!done) { - num_steps=1; - stack_depth=-1; - command(); - if(num_steps==0) - show_state(); - while(!done && ((num_steps<0) || ((num_steps--)>0))) { - step(); - show_state(); - } - while(!done && (stack_depth<=call_stack.size()) - && (stack_depth>=0)) { - step(); - show_state(); - } - } - std::cout << "Program End." << std::endl; - } catch (const char *e) { - std::cout << e << std::endl; - } - while(!done) command(); -} - -/******************************************************************* - -Function: interpretert::initialise - - Inputs: - - Outputs: - - Purpose: - - \*******************************************************************/ - -void interpretert::initialise(bool init) { build_memory_map(); const goto_functionst::function_mapt::const_iterator @@ -98,16 +48,12 @@ void interpretert::initialise(bool init) { function=main_it; done=false; - if(init) { - stack_depth=call_stack.size()+1; + + while(!done) + { show_state(); - step(); - while(!done && (stack_depth<=call_stack.size()) && (stack_depth>=0)) { - show_state(); - step(); - } - clear_input_flags(); - input_vars.clear(); + command(); + if(!done) step(); } } @@ -125,7 +71,6 @@ Function: interpretert::show_state void interpretert::show_state() { - if(!show) return; std::cout << std::endl; std::cout << "----------------------------------------------------" << std::endl; @@ -137,6 +82,8 @@ void interpretert::show_state() } else function->second.body.output_instruction(ns, function->first, std::cout, PC); + + std::cout << std::endl; } /*******************************************************************\ @@ -154,7 +101,7 @@ Function: interpretert::command void interpretert::command() { #define BUFSIZE 100 - char command[BUFSIZE]; + char command[BUFSIZE]; if(fgets(command, BUFSIZE-1, stdin)==NULL) { done=true; @@ -165,74 +112,6 @@ void interpretert::command() if(ch=='q') done=true; - else if(ch=='h') { - num_steps=0; - std::cout << "Interpreter help" << std::endl; - std::cout << "h: display this menu" << std::endl; - std::cout << "i: output program inputs" << std::endl; - std::cout << "id: output program inputs with det values for don cares" << std::endl; - std::cout << "in: output program inputs with non-det values for don cares" << std::endl; - std::cout << "it: output program inputs for last trace" << std::endl; - std::cout << "i file: output program inputs for [json] file trace" << std::endl; - std::cout << "j: output json trace" << std::endl; - std::cout << "o: output goto trace" << std::endl; - std::cout << "q: quit" << std::endl; - std::cout << "r: run until completion" << std::endl; - std::cout << "s#: step a number of instructions" << std::endl; - std::cout << "sa: step across a function" << std::endl; - std::cout << "so: step out of a function" << std::endl; - } else if(ch=='i') { - ch=tolower(command[1]); - if(ch=='d') list_inputs(false); - else if(ch=='n') list_inputs(true); - else if(ch=='t') load_counter_example_inputs(steps); - else if(ch==' ') load_counter_example_inputs(command+3); - num_steps=0; - print_inputs(); - } else if(ch=='j') { - num_steps=0; - jsont json_steps; - convert(ns, steps, json_steps); - ch=tolower(command[1]); - if(ch==' ') { - std::ofstream file; - file.open(command+2); - if(file.is_open()) { - json_steps.output(file); - file.close(); - return; - } - } - json_steps.output(std::cout); - } else if(ch=='o') { - num_steps=0; - ch=tolower(command[1]); - if(ch==' ') { - std::ofstream file; - file.open(command+2); - if(file.is_open()) { - steps.output(ns, file); - file.close(); - return; - } - } - steps.output(ns, std::cout); - } else if(ch=='r') { - num_steps=-1; - } else if(ch=='s') { - ch=tolower(command[1]); - if(ch=='e') - num_steps=-1; - if(ch=='o') - stack_depth=call_stack.size(); - if(ch=='a') - stack_depth=call_stack.size()+1; - else { - num_steps=atoi(command+1); - if(num_steps==0) - num_steps=1; - } - } } /*******************************************************************\ @@ -265,26 +144,19 @@ void interpretert::step() } next_PC=PC; - next_PC++; + next_PC++; - steps.add_step(goto_trace_stept()); - goto_trace_stept &trace_step=steps.get_last_step(); - trace_step.thread_nr=thread_id; - trace_step.pc=PC; switch(PC->type) { case GOTO: - trace_step.type=goto_trace_stept::GOTO; execute_goto(); break; case ASSUME: - trace_step.type=goto_trace_stept::ASSUME; execute_assume(); break; case ASSERT: - trace_step.type=goto_trace_stept::ASSERT; execute_assert(); break; @@ -293,23 +165,15 @@ void interpretert::step() break; case DECL: - trace_step.type=goto_trace_stept::DECL; - /*trace_step.full_lhs=step.full_lhs; - trace_step.lhs_object=to_symbol_expr(trace_step.full_lhs); - trace_step.full_lhs_value=decision_procedure.get(step.ssa_lhs);*/ execute_decl(); break; case SKIP: case LOCATION: - trace_step.type=goto_trace_stept::LOCATION; - break; case END_FUNCTION: - trace_step.type=goto_trace_stept::FUNCTION_RETURN; break; case RETURN: - trace_step.type=goto_trace_stept::FUNCTION_RETURN; if(call_stack.empty()) throw "RETURN without call"; @@ -325,17 +189,14 @@ void interpretert::step() break; case ASSIGN: - trace_step.type=goto_trace_stept::ASSIGNMENT; execute_assign(); break; case FUNCTION_CALL: - trace_step.type=goto_trace_stept::FUNCTION_CALL; execute_function_call(); break; case START_THREAD: - trace_step.type=goto_trace_stept::SPAWN; throw "START_THREAD not yet implemented"; case END_THREAD: @@ -343,16 +204,14 @@ void interpretert::step() break; case ATOMIC_BEGIN: - trace_step.type=goto_trace_stept::ATOMIC_BEGIN; throw "ATOMIC_BEGIN not yet implemented"; case ATOMIC_END: - trace_step.type=goto_trace_stept::ATOMIC_END; throw "ATOMIC_END not yet implemented"; case DEAD: - trace_step.type=goto_trace_stept::DEAD; - break;//throw "DEAD not yet implemented"; + throw "DEAD not yet implemented"; + default: throw "encountered instruction with undefined instruction type"; } @@ -429,173 +288,7 @@ void interpretert::execute_decl() assert(PC->code.get_statement()==ID_decl); } -/******************************************************************* - -Function: interpretert::get_component_id - - Inputs: - - Outputs: - - Purpose: - - \*******************************************************************/ -irep_idt interpretert::get_component_id(irep_idt &object,unsigned offset) -{ - const symbolt &symbol=ns.lookup(object); - const typet real_type=ns.follow(symbol.type); - if(real_type.id()!=ID_struct) - throw "request for member of non-struct"; - const struct_typet &struct_type=to_struct_type(real_type); - const struct_typet::componentst &components=struct_type.components(); - for(struct_typet::componentst::const_iterator it=components.begin(); - it!=components.end();++it) { - if(offset<=0) return it->id(); - unsigned size=get_size(it->type()); - assert(size>=0); - offset -= size; - } - return object; -} - -/******************************************************************* - -Function: interpretert::get_value - - Inputs: - - Outputs: - - Purpose: - - \*******************************************************************/ -exprt interpretert::get_value(const typet &type, unsigned offset) -{ - const typet real_type=ns.follow(type); - if(real_type.id()==ID_struct) { - exprt result=struct_exprt(real_type); - const struct_typet &struct_type=to_struct_type(real_type); - const struct_typet::componentst &components=struct_type.components(); - result.reserve_operands(components.size()); - for(struct_typet::componentst::const_iterator it=components.begin(); - it!=components.end();++it) { - unsigned size=get_size(it->type()); - assert(size>=0); - const exprt operand=get_value(it->type(), offset); - offset += size; - result.copy_to_operands(operand); - } - return result; - } else if(real_type.id()==ID_array) { - exprt result(ID_constant, type); - //array_exprt result(type); - const exprt &size_expr=static_cast(type.find(ID_size)); - unsigned subtype_size=get_size(type.subtype()); - mp_integer mp_count; - to_integer(size_expr, mp_count); - unsigned count=integer2unsigned(mp_count); - result.reserve_operands(count); - for(unsigned i=0;i=0) - return side_effect_expr_nondett(type); - std::vector rhs; - rhs.push_back(memory[offset].value); - return get_value(type, rhs); -} - -/******************************************************************* - Function: interpretert::get_value - - Inputs: - - Outputs: - - Purpose: - - \*******************************************************************/ -exprt interpretert::get_value(const typet &type, std::vector &rhs,unsigned offset) -{ - const typet real_type=ns.follow(type); - - if(real_type.id()==ID_struct) { - exprt result=struct_exprt(real_type); - const struct_typet &struct_type=to_struct_type(real_type); - const struct_typet::componentst &components=struct_type.components(); - - result.reserve_operands(components.size()); - for(struct_typet::componentst::const_iterator it=components.begin(); - it!=components.end();++it) { - unsigned size=get_size(it->type()); - assert(size>=0); - const exprt operand=get_value(it->type(), rhs, offset); - offset += size; - result.copy_to_operands(operand); - } - - return result; - } else if(real_type.id()==ID_array) { - exprt result(ID_constant, type); - //array_exprt result(type); - const exprt &size_expr=static_cast(type.find(ID_size)); - unsigned subtype_size=get_size(type.subtype()); - mp_integer mp_count; - to_integer(size_expr, mp_count); - unsigned count=integer2unsigned(mp_count); - result.reserve_operands(count); - for(unsigned i=0;i &rhs) { - for(unsigned i=0;i>argument_values; + std::vector > argument_values; argument_values.resize(function_call.arguments().size()); - for(std::size_t i=0;i=memory.size()) memory.resize(address+1); memory[address].value=0; memory[address].identifier=id; memory[address].offset=i; - memory[address].initialised=0; } stack_pointer+=size; @@ -806,7 +486,8 @@ void interpretert::execute_function_call() if(argument_values.size()second.body.instructions.begin(); + next_PC=f_it->second.body.instructions.begin(); } else - std::cout << "no body for "+id2string(identifier);//TODO:used to be throw. need some better approach? need to check state of buffers (and by refs) + throw "no body for "+id2string(identifier); } /*******************************************************************\ @@ -840,7 +521,6 @@ void interpretert::build_memory_map() memory.resize(1); memory[0].offset=0; memory[0].identifier="NULL-OBJECT"; - memory[0].initialised=0; // now do regular static symbols for(symbol_tablet::symbolst::const_iterator @@ -884,13 +564,12 @@ void interpretert::build_memory_map(const symbolt &symbol) memory.resize(address+size); memory_map[symbol.name]=address; - for(unsigned i=0;i rhs; - evaluate(it->second, rhs); - if(rhs.empty()) - continue; - memory_mapt::const_iterator m_it1=memory_map.find(it->first); - if(m_it1==memory_map.end()) - continue; - mp_integer address=m_it1->second; - unsigned size=get_size(it->second.type()); - if(size!=rhs.size()) - continue; - assign(address, rhs); - } - clear_input_flags(); -} - -/******************************************************************* - Function: list_inputs - - Inputs: - - Outputs: - - Purpose: - - \*******************************************************************/ -void interpretert::list_inputs(bool use_non_det) { - input_vars.clear(); - for(unsigned long i=0;i=0) - continue; - if(strncmp(cell.identifier.c_str(), "__CPROVER", 9)==0) - continue; - - try { - symbolt symbol=symbol_table.lookup(cell.identifier); - if(use_non_det) { - exprt value=get_value(symbol.type, i - cell.offset); - input_vars.insert( - std::pair(cell.identifier, value)); - } else { - std::vector rhs; - while(memory[i].offset>0) - i--; - rhs.push_back(memory[i].value); - for(unsigned long j=i+1;j(cell.identifier, value)); - } - } catch (const char *e) { - } catch (const std::string e) { - } - for(unsigned long j=i+1; - (j0) - continue; - if((cell.initialised<0) - && (strncmp(cell.identifier.c_str(), "__CPROVER", 9)!=0)) { - input_vars[cell.identifier]=inputs[cell.identifier]; - } - } - -} - -/******************************************************************* - Function: print_inputs - - Inputs: - - Outputs: - - Purpose: - - \*******************************************************************/ -void interpretert::print_inputs() { - if(input_vars.size()<=0) - list_inputs(); - for(input_varst::iterator it=input_vars.begin();it!=input_vars.end(); - it++) { - std::cout << it->first << "=" << from_expr(ns, it->first, it->second) - << std::endl; - } -} - -/******************************************************************* - Function: load_counter_example_inputs - - Inputs: - - Outputs: - - Purpose: - - \*******************************************************************/ - -interpretert::input_varst& interpretert::load_counter_example_inputs( - const std::string &filename) { - jsont counter_example; - message_clientt messgae_client; - if(parse_json(filename, messgae_client.get_message_handler(), - counter_example)) { - show=false; - input_varst inputs; - for(jsont::objectt::const_iterator it=counter_example.object.end(); - it!=counter_example.object.begin();) { - it--; - irep_idt id=it->second["lhs"].value; - inputs[id]=to_expr(ns, id, it->second["value"].value); - } - try { - initialise(true); - fill_inputs(inputs); - while(!done) - step(); - } catch(const char *e) { - std::cout << e << std::endl; - } - list_inputs(inputs); - show=true; - } - return input_vars; -} - -interpretert::input_varst& interpretert::load_counter_example_inputs(goto_tracet &trace) { - jsont counter_example; - message_clientt messgae_client; - show=false; - input_varst inputs; - for(goto_tracet::stepst::iterator it=trace.steps.end();it!=trace.steps.begin();) - { - it--; - if(it->pc->is_other() || it->pc->is_assign()) - { - irep_idt id=to_symbol_expr(it->full_lhs).get_identifier(); - inputs[id]=it->full_lhs_value; - } - } - try { - initialise(true); - fill_inputs(inputs); - while(!done) { - show_state(); - step(); - } - } catch(const char *e) { - std::cout << e << std::endl; - } - list_inputs(inputs); - show=true; - return input_vars; -} - -/******************************************************************* +/*******************************************************************\ Function: interpreter diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 436f0b25ec4..db3f3708c88 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -26,20 +26,26 @@ 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) { +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()); - symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); + symbol_exprt length; + length = fresh_symbol("string_length",refined_string_typet::index_type()); + symbol_exprt content; + 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) +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); @@ -47,16 +53,21 @@ void string_exprt::of_if(const if_exprt &expr, std::map 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())); + symbol_exprt qvar; + qvar = fresh_symbol("string_if_true",refined_string_typet::index_type()); + string_constraintt if_true(expr.cond(),equal_exprt((*this)[qvar],t[qvar])); + axioms.push_back(if_true.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_constraintt if_false(not_exprt(expr.cond()),equal_exprt((*this)[qvar2],f[qvar2])); + axioms.push_back(if_false.forall(qvar2,index_zero,f.length())); } -string_exprt string_exprt::get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym) { +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); @@ -75,7 +86,9 @@ string_exprt string_exprt::get_string_of_symbol(std::map } -string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms) +string_exprt string_exprt::of_expr +(const exprt & unrefined_string, + std::map & symbol_to_string, axiom_vect & axioms) { unsignedbv_typet char_type; @@ -107,7 +120,9 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms) +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) { @@ -184,23 +199,26 @@ void string_exprt::of_function_application(const function_application_exprt & ex 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; - } + 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){ +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){ - +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); @@ -224,16 +242,18 @@ 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) +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) +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? + assert(args.size() == 1); const exprt &arg = args[0]; irep_idt sval; @@ -257,7 +277,8 @@ void string_exprt::of_string_literal(const function_application_exprt &f, axiom_ 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 + // 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(); @@ -267,7 +288,9 @@ 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, 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); @@ -276,14 +299,15 @@ void string_exprt::of_string_concat(const string_exprt & s1, const string_exprt 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) +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 @@ -296,7 +320,9 @@ 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) +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); @@ -308,17 +334,22 @@ 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) +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()); + typet char_type = is_c_string?refined_string_typet::char_type(): + refined_string_typet::java_char_type(); exprt null_char; + if(is_c_string) - null_char = constant_of_nat(0,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + null_char = constant_of_nat(0,STRING_SOLVER_CHAR_WIDTH,char_type); else - null_char = constant_of_nat(0,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + null_char = constant_of_nat(0,JAVA_STRING_SOLVER_CHAR_WIDTH,char_type); string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); @@ -327,7 +358,6 @@ void string_exprt::of_string_set_length(const function_application_exprt &f, std 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])), @@ -337,7 +367,8 @@ void string_exprt::of_string_set_length(const function_application_exprt &f, std -void string_exprt::of_java_char_array(const exprt & char_array, axiom_vect & axioms) +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()); @@ -347,7 +378,8 @@ void string_exprt::of_java_char_array(const exprt & char_array, axiom_vect & axi } -void string_exprt::of_string_value_of(const function_application_exprt &f, 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(); if(args.size() == 3) @@ -405,7 +437,8 @@ void string_exprt::of_string_substring } void string_exprt::of_string_trim -(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) +(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); @@ -424,8 +457,7 @@ void string_exprt::of_string_trim 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)); @@ -449,7 +481,8 @@ void string_exprt::of_string_trim } 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 &expr, + std::map & symbol_to_string, axiom_vect & axioms) { const function_application_exprt::argumentst &args = expr.arguments(); assert(args.size() == 1); @@ -1132,9 +1165,6 @@ void string_exprt::of_string_insert_float(const function_application_exprt &f, s 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: @@ -1148,7 +1178,6 @@ void string_exprt::of_string_format(const function_application_exprt &f, std::ma // 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; @@ -1156,13 +1185,11 @@ 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) { - std::cout << "string format: position = " << position << std::endl; switch(format_string[position+1]) { case 'd' : { @@ -1174,7 +1201,6 @@ void string_exprt::of_string_format(const function_application_exprt &f, std::ma default: { - std::cout << "warning: unknown string format: " << format_string << std::endl; break; } } diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 052469b4d34..e817e2bcc1e 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -127,7 +127,7 @@ class string_exprt : public struct_exprt { 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: + // Warning: the specifications of these functions are 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); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 0cefe8d2e4f..a715d016d23 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -69,10 +69,10 @@ 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 + { + return SUB::convert_rest(expr); + } } bvt string_refinementt::convert_pointer_type(const exprt &expr) @@ -82,20 +82,19 @@ bvt string_refinementt::convert_pointer_type(const exprt &expr) 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); - } + 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) { 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)); @@ -106,7 +105,6 @@ 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; } string_exprt string_refinementt::make_string(const exprt & str) @@ -194,11 +192,7 @@ 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; + assert(!identifier.empty()); if (refined_string_typet::is_unrefined_string_type(type)) { debug() << "string_refinementt::convert_symbol of unrefined string" << eom; @@ -306,25 +300,8 @@ void string_refinementt::print_time(std::string s) { << (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; - - 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(); } From 7efb88e7fa98ed3e03f99c272cad2a828a5f945e Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Sat, 15 Oct 2016 20:51:45 +0100 Subject: [PATCH 283/290] 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 854ac387e93db3b58f380e4c71c8bfda3b2c93d8 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 27 Oct 2016 10:58:17 +0100 Subject: [PATCH 284/290] adding a PASS option to cbmc to activate the pass solver --- src/cbmc/cbmc_parse_options.cpp | 13 +++++++++++++ src/cbmc/cbmc_parse_options.h | 2 +- src/cbmc/cbmc_solvers.cpp | 24 ++++++++++++++++++++++++ src/cbmc/cbmc_solvers.h | 6 +++++- 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 3b0d7b5bc6a..0ac16a59fec 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 @@ -341,6 +342,11 @@ 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")); @@ -911,6 +917,12 @@ bool cbmc_parse_optionst::process_goto_program( status() << "Partial Inlining" << eom; goto_partial_inline(goto_functions, ns, ui_message_handler); + + if(cmdline.isset("pass")) { + status() << "PASS Preprocessing " << eom; + pass_preprocess(symbol_table, goto_functions); + } + // remove returns, gcc vectors, complex remove_returns(symbol_table, goto_functions); remove_vector(symbol_table, goto_functions); @@ -1175,6 +1187,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" " --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 33fe0ba5175..397dff4cf2b 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)" \ + "(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 319b60fe08b..cdf2ed03fae 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 @@ -324,6 +325,29 @@ cbmc_solverst::solvert* cbmc_solverst::get_bv_refinement() /*******************************************************************\ +Function: cbmc_solverst::get_string_refinement + + Inputs: + + Outputs: + + Purpose: + +\*******************************************************************/ + +cbmc_solverst::solvert* cbmc_solverst::get_string_refinement() +{ + propt *prop; + 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); + return new cbmc_solver_with_propt(string_refinement, prop); +} + +/*******************************************************************\ + Function: cbmc_solverst::get_smt1 Inputs: diff --git a/src/cbmc/cbmc_solvers.h b/src/cbmc/cbmc_solvers.h index e121b8fa2af..cc4a48dcb30 100644 --- a/src/cbmc/cbmc_solvers.h +++ b/src/cbmc/cbmc_solvers.h @@ -79,11 +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("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")) @@ -111,6 +114,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); From 26f02b2c57bb24f96d6209b8313b62e423eca858 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 27 Oct 2016 11:32:18 +0100 Subject: [PATCH 285/290] Makefile changes necessary to compile the string solver --- src/solvers/Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/solvers/Makefile b/src/solvers/Makefile index b806aa47886..4003e19c39a 100644 --- a/src/solvers/Makefile +++ b/src/solvers/Makefile @@ -118,6 +118,11 @@ 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_constraint.cpp \ + refinement/string_functions.cpp \ + refinement/refined_string_type.cpp \ + refinement/string_expr.cpp \ + refinement/string_refinement.cpp \ miniBDD/miniBDD.cpp INCLUDES= -I .. \ From e83f58dfe79190163b6122ecde5959705620c1bc Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 11 Nov 2016 09:13:50 +0000 Subject: [PATCH 286/290] 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 3b92cffc4e65f3548e69144c7898e998d2e73708 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 11 Nov 2016 14:59:54 +0000 Subject: [PATCH 287/290] 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 6d32484e455f04b05071f6138d58a85c563aec69 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 2 Dec 2016 16:34:50 +0000 Subject: [PATCH 288/290] failed tentative merge --- src/ansi-c/library/java.io.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/ansi-c/library/java.io.c b/src/ansi-c/library/java.io.c index 11648aa55c8..91f0302c45b 100644 --- a/src/ansi-c/library/java.io.c +++ b/src/ansi-c/library/java.io.c @@ -6,6 +6,3 @@ int __CPROVER_ID "java::java.io.InputStream.read:()I" (void *) __CPROVER_assume(read_result>=-1 && read_result<=255); return read_result; } - - - From 0b1a56baf8f5239e6df76372fc434f7d5b3b519a Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 2 Dec 2016 16:53:56 +0000 Subject: [PATCH 289/290] Removed files that should not be part of this pull request --- src/config.inc | 3 +- src/goto-programs/pass_preprocess.cpp | 424 ---- src/goto-programs/pass_preprocess.h | 21 - .../java_bytecode_convert_method.cpp | 10 +- .../refinement/refined_string_type.cpp | 76 - src/solvers/refinement/refined_string_type.h | 73 - src/solvers/refinement/string_constraint.cpp | 67 - src/solvers/refinement/string_constraint.h | 105 - src/solvers/refinement/string_expr.cpp | 1229 ------------ src/solvers/refinement/string_expr.h | 153 -- src/solvers/refinement/string_functions.cpp | 19 - src/solvers/refinement/string_functions.h | 76 - src/solvers/refinement/string_refinement.cpp | 1713 ----------------- src/solvers/refinement/string_refinement.h | 216 --- src/util/unicode.cpp | 8 - src/util/unicode.h | 2 - 16 files changed, 3 insertions(+), 4192 deletions(-) delete mode 100644 src/goto-programs/pass_preprocess.cpp delete mode 100644 src/goto-programs/pass_preprocess.h delete mode 100644 src/solvers/refinement/refined_string_type.cpp delete mode 100644 src/solvers/refinement/refined_string_type.h delete mode 100644 src/solvers/refinement/string_constraint.cpp delete mode 100644 src/solvers/refinement/string_constraint.h delete mode 100644 src/solvers/refinement/string_expr.cpp delete mode 100644 src/solvers/refinement/string_expr.h delete mode 100644 src/solvers/refinement/string_functions.cpp delete mode 100644 src/solvers/refinement/string_functions.h delete mode 100644 src/solvers/refinement/string_refinement.cpp delete mode 100644 src/solvers/refinement/string_refinement.h diff --git a/src/config.inc b/src/config.inc index 46d931824ec..440d36082df 100644 --- a/src/config.inc +++ b/src/config.inc @@ -1,9 +1,8 @@ -# -*- 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 -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 # If GLPK is available; this is used by goto-instrument and musketeer. diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp deleted file mode 100644 index b67edede518..00000000000 --- a/src/goto-programs/pass_preprocess.cpp +++ /dev/null @@ -1,424 +0,0 @@ -/*******************************************************************\ - -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 -#include - -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)" - // 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)]; - - function_application_exprt rhs; - 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++) - 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(); - 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){ - 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(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()));*/ - 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)" - 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(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)]; -} - -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_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()); - - 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;//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++) - 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]); - // 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 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) -{ - 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(); - - 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); - } 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); - } 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); - } 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); - } 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); - - } 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); - - } 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(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 - ("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(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_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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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(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(symbol_table, goto_functions, 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - } 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); - - } 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); - } 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); - } 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); - } 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); - } - } - - } 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()); - 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; -} - -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()); - 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_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_string_literal_func; - 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) - { - replace_string_calls(symbol_table,goto_functions,it); - } -} - - diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h deleted file mode 100644 index c591ba2eced..00000000000 --- a/src/goto-programs/pass_preprocess.h +++ /dev/null @@ -1,21 +0,0 @@ -/*******************************************************************\ - -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 - - -exprt replace_string_literals(symbol_tablet &, goto_functionst &,const exprt & ); -void pass_preprocess(symbol_tablet &, goto_functionst &); - -#endif diff --git a/src/java_bytecode/java_bytecode_convert_method.cpp b/src/java_bytecode/java_bytecode_convert_method.cpp index d00d58f15a7..4fd33ae121a 100644 --- a/src/java_bytecode/java_bytecode_convert_method.cpp +++ b/src/java_bytecode/java_bytecode_convert_method.cpp @@ -413,7 +413,7 @@ void java_bytecode_convert_methodt::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()) @@ -761,7 +761,6 @@ codet java_bytecode_convert_methodt::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 @@ -784,16 +783,11 @@ codet java_bytecode_convert_methodt::convert_instructions( else { // static binding - /*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()=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/refinement/refined_string_type.cpp b/src/solvers/refinement/refined_string_type.cpp deleted file mode 100644 index 8f739ea2520..00000000000 --- a/src/solvers/refinement/refined_string_type.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/** -*- 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; -} - -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 deleted file mode 100644 index 3226587d912..00000000000 --- a/src/solvers/refinement/refined_string_type.h +++ /dev/null @@ -1,73 +0,0 @@ -/** -*- 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 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 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) - ); } - - 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 diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp deleted file mode 100644 index c6fbf6016db..00000000000 --- a/src/solvers/refinement/string_constraint.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/** -*- C++ -*- *****************************************************\ - -Module: String constraints - (see the PASS paper at HVC'13) - -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::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::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::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)))); -} diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h deleted file mode 100644 index 58c0211e2d5..00000000000 --- a/src/solvers/refinement/string_constraint.h +++ /dev/null @@ -1,105 +0,0 @@ -/** -*- 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 -#include - -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; - -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 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, - 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; - - 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 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); } - - - // 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)); - } - - -}; - - -#endif diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp deleted file mode 100644 index db3f3708c88..00000000000 --- a/src/solvers/refinement/string_expr.cpp +++ /dev/null @@ -1,1229 +0,0 @@ -/** -*- C++ -*- *****************************************************\ - -Module: String expressions for PASS algorithm - (see the PASS paper at HVC'13) - -Author: Romain Brenguier, romain.brenguier@diffblue.com - -\*******************************************************************/ - -#include -#include -#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) -{ - 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); -} - -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)) -{ - refined_string_typet t(char_type); - symbol_exprt length; - length = fresh_symbol("string_length",refined_string_typet::index_type()); - symbol_exprt content; - 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(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; - qvar = fresh_symbol("string_if_true",refined_string_typet::index_type()); - string_constraintt if_true(expr.cond(),equal_exprt((*this)[qvar],t[qvar])); - axioms.push_back(if_true.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()); - string_constraintt if_false(not_exprt(expr.cond()),equal_exprt((*this)[qvar2],f[qvar2])); - axioms.push_back(if_false.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); - 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()); - typet char_type = is_c_string?refined_string_typet::char_type(): - refined_string_typet::java_char_type(); - exprt null_char; - - if(is_c_string) - null_char = constant_of_nat(0,STRING_SOLVER_CHAR_WIDTH,char_type); - else - null_char = constant_of_nat(0,JAVA_STRING_SOLVER_CHAR_WIDTH,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()); - - 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); -} - -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); - 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); - - 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()))); - - while(position != std::string::npos) - { - 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); - strings.push_back(str); - break; - } - - default: - { - 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 deleted file mode 100644 index e817e2bcc1e..00000000000 --- a/src/solvers/refinement/string_expr.h +++ /dev/null @@ -1,153 +0,0 @@ -/** -*- 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 -#include -#include - - -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. - 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()); - - // 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[] (const exprt & idx) const - { 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(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(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); - - 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 are 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); - -}; - - -extern inline string_exprt &to_string_expr(exprt &expr){ - assert(expr.id()==ID_struct); - return static_cast(expr); -} - - -#endif diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp deleted file mode 100644 index f3383f436f0..00000000000 --- a/src/solvers/refinement/string_functions.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/*******************************************************************\ - -Module: Defines identifiers for string functions - -Author: Romain Brenguier - -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 deleted file mode 100644 index f07294ac0a4..00000000000 --- a/src/solvers/refinement/string_functions.h +++ /dev/null @@ -1,76 +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 - -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"); -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_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 deleted file mode 100644 index a715d016d23..00000000000 --- a/src/solvers/refinement/string_refinement.cpp +++ /dev/null @@ -1,1713 +0,0 @@ -/** -*- C++ -*- *****************************************************\ - -Module: String support via axiom instantiation - (see the PASS paper at HVC'13) - -Author: Alberto Griggio, alberto.griggio@gmail.com - -\*******************************************************************/ - -#include -#include -#include -#include -#include -#include - - -// 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) { - languagest languages(ns, new_ansi_c_language()); - std::string string_value; - languages.from_expr(expr, string_value); - return string_value; -} - -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; -} - -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; - } -} - - -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) - { - bvt bv = convert_function_application(to_function_application_expr(expr)); - assert(bv.size() == 1); - return bv[0]; - } - else - { - 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) -{ - debug() << "string_refinementt::make_string of " << pretty_short(sym) << eom; - if(str.id()==ID_symbol) - assign_to_symbol(sym,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); - assign_to_symbol(sym,s); - } - else - assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); - } -} - -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 && - 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); -} - - -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(); - - 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()); - - if(expr.lhs().id()==ID_symbol && - // We can have affectation of string from StringBuilder or CharSequence - //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(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; - } - } - - return true; -} - -bvt string_refinementt::convert_symbol(const exprt &expr) -{ - 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)) { - 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); -} - - -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; -} - -void string_refinementt::post_process() -{ - SUB::post_process(); -} - -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]); - } - 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(); - - 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) { - 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; - 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 (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) { - return integer2unsigned(string2integer(as_string(expr.get_value()),2)); -} - -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 "\"\""; - 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 { - return "unable to get array-list"; - } - - std::ostringstream buf; - buf << "\""; - for(unsigned i = 0; i < n; i++) { - char c = (char) str[i]; - if(31::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() << 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(); - it != 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++) { - debug() << "" << it->get_identifier() << " := " << pretty_short(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]; - - exprt 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; - - switch (solver()) { - case decision_proceduret::D_SATISFIABLE: { - exprt val = solver.get(axiom.get_univ_var()); - violated.push_back(std::make_pair(i, val)); - } break; - case decision_proceduret::D_UNSATISFIABLE: - break; - default: - throw "failure in checking axiom"; - } - } - - - 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)); - violated.push_back(std::make_pair(i, val)); - } - - - if (violated.empty()) { - debug() << "no violated property" << eom; - return true; - } - else { - 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); - 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; - } - } - - return false; - } - -} - - -// 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; - - 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; - 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 { - 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; - - 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(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())); -} - -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, 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++) { - 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) { - 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); -} - - - -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::initial_index_set(const axiom_vect & 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) { - for (size_t i = 0; i < cur.size(); ++i) { - update_index_set(cur[i]); - } -} - -void string_refinementt::initial_index_set(const string_constraintt &axiom) -{ - assert(axiom.is_univ_quant()); - 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,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); - } - - } 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(); - 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; - current_index_set[s].insert(simplified); - } - } else { - forall_operands(it, cur) { - to_process.push_back(*it); - } - } - } -} - - -// 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 { - expr.visit(v1); - return nil_exprt(); - } - catch (exprt i) { return i; } -} - - - -string_constraintt 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(); - - 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(zero,ID_le,val)); - replace_expr(axiom.get_univ_var(), r, bounds); - return string_constraintt(bounds,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 deleted file mode 100644 index 07334e19d96..00000000000 --- a/src/solvers/refinement/string_refinement.h +++ /dev/null @@ -1,216 +0,0 @@ -/** -*- 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 -#include -#include - -class string_refinementt: public bv_refinementt -{ -public: - string_refinementt(const namespacet &_ns, propt &_prop); - ~string_refinementt() {}; - - // Should we use counter examples at each iteration? - bool use_counter_example; - - // 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(); } - - symbol_exprt fresh_index(const irep_idt &prefix); - symbol_exprt fresh_boolean(const irep_idt &prefix); - - static exprt is_positive(const exprt & x); - -private: - typedef bv_refinementt SUB; - -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); - - decision_proceduret::resultt dec_solve(); - - // 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: - - // 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; - - // 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; - - // 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; - } - - 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); - - 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 - void add_instantiations(); - - // Return true if the current model satisfies all the axioms - bool check_axioms(); - - // 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 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]. - // 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_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 // - // 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); - - // 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); - - // 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); -}; - -#endif diff --git a/src/util/unicode.cpp b/src/util/unicode.cpp index 5f0334a0069..442d87f2f3c 100644 --- a/src/util/unicode.cpp +++ b/src/util/unicode.cpp @@ -7,8 +7,6 @@ Author: Daniel Kroening, kroening@kroening.com \*******************************************************************/ #include -#include -#include #include "unicode.h" @@ -255,9 +253,3 @@ 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 05bc84a463d..44038a26c04 100644 --- a/src/util/unicode.h +++ b/src/util/unicode.h @@ -22,8 +22,6 @@ 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); #endif From 8e45db2641dafd7aa73ae65b8924e8ffa30bebc2 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 2 Dec 2016 16:56:32 +0000 Subject: [PATCH 290/290] Removed useless differences with master --- src/cbmc/cbmc_parse_options.cpp | 3 +-- src/cbmc/cbmc_solvers.h | 5 +++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 4db0a6050df..a052ce716c2 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -920,9 +920,8 @@ 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_preprocess(symbol_table, goto_functions); diff --git a/src/cbmc/cbmc_solvers.h b/src/cbmc/cbmc_solvers.h index d095fd70e39..0096f140ffe 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("refine")) solver = get_bv_refinement(); else if(options.get_bool_option("pass")) - solver = get_string_refinement(); - else if(options.get_bool_option("smt1")) + 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")) solver = get_smt2(get_smt2_solver_type());