File tree 2 files changed +10
-3
lines changed
2 files changed +10
-3
lines changed Original file line number Diff line number Diff line change @@ -177,6 +177,7 @@ string_exprt string_constraint_generatort::fresh_string(
177
177
symbol_exprt content=fresh_symbol (" string_content" , type.get_content_type ());
178
178
string_exprt str (length, content, type);
179
179
created_strings.insert (str);
180
+ add_default_axioms (str);
180
181
return str;
181
182
}
182
183
@@ -246,7 +247,7 @@ string_exprt string_constraint_generatort::convert_java_string_to_string_exprt(
246
247
247
248
/* ******************************************************************\
248
249
249
- Function: string_constraint_generatort::add_default_constraints
250
+ Function: string_constraint_generatort::add_default_axioms
250
251
251
252
Inputs:
252
253
s - a string expression
@@ -267,7 +268,8 @@ Function: string_constraint_generatort::add_default_constraints
267
268
void string_constraint_generatort::add_default_axioms (
268
269
const string_exprt &s)
269
270
{
270
- s.axiom_for_is_longer_than (from_integer (0 , s.length ().type ()));
271
+ axioms.push_back (
272
+ s.axiom_for_is_longer_than (from_integer (0 , s.length ().type ())));
271
273
if (max_string_length!=std::numeric_limits<size_t >::max ())
272
274
axioms.push_back (s.axiom_for_is_shorter_than (max_string_length));
273
275
Original file line number Diff line number Diff line change @@ -332,7 +332,6 @@ void string_refinementt::concretize_string(const exprt &expr)
332
332
{
333
333
string_exprt str=to_string_expr (expr);
334
334
exprt length=get (str.length ());
335
- add_lemma (equal_exprt (str.length (), length));
336
335
exprt content=str.content ();
337
336
replace_expr (symbol_resolve, content);
338
337
found_length[content]=length;
@@ -350,6 +349,7 @@ void string_refinementt::concretize_string(const exprt &expr)
350
349
else
351
350
{
352
351
size_t concretize_limit=found_length.to_long ();
352
+ assert (concretize_limit<=generator.max_string_length );
353
353
concretize_limit=concretize_limit>generator.max_string_length ?
354
354
generator.max_string_length :concretize_limit;
355
355
exprt content_expr=str.content ();
@@ -596,7 +596,11 @@ decision_proceduret::resultt string_refinementt::dec_solve()
596
596
do_concretizing=false ;
597
597
}
598
598
else
599
+ {
600
+ debug () << " check_SAT: the model is correct and "
601
+ << " does not need concretizing" << eom;
599
602
return D_SATISFIABLE;
603
+ }
600
604
}
601
605
602
606
display_index_set ();
@@ -611,6 +615,7 @@ decision_proceduret::resultt string_refinementt::dec_solve()
611
615
}
612
616
break ;
613
617
default :
618
+ debug () << " check_SAT: default return " << res << eom;
614
619
return res;
615
620
}
616
621
}
You can’t perform that action at this time.
0 commit comments