Skip to content

Commit ec1844e

Browse files
Merge pull request #2695 from romainbrenguier/clean-up/string-constraint-generator
Refactor string_constraint_generatort
2 parents 20f05af + a6fe4e1 commit ec1844e

21 files changed

+2011
-1631
lines changed

jbmc/unit/solvers/refinement/string_constraint_instantiation/instantiate_not_contains.cpp

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -196,38 +196,40 @@ SCENARIO("instantiate_not_contains",
196196
symbol_tablet symtab;
197197
const namespacet empty_ns(symtab);
198198
string_constraint_generatort generator(ns);
199-
exprt res=generator.add_axioms_for_function_application(func);
199+
const auto pair = generator.add_axioms_for_function_application(
200+
generator.fresh_symbol, func);
201+
const exprt &res = pair.first;
202+
const string_constraintst &constraints = pair.second;
203+
200204
std::string axioms;
201205
std::vector<string_not_contains_constraintt> nc_axioms;
206+
std::map<string_not_contains_constraintt, symbol_exprt> witnesses;
202207

203-
const auto constraints = generator.get_constraints();
204208
std::accumulate(
205-
constraints.begin(),
206-
constraints.end(),
209+
constraints.universal.begin(),
210+
constraints.universal.end(),
207211
axioms,
208212
[&](const std::string &accu, string_constraintt sc) {
209213
simplify(sc.body, ns);
210214
return accu + to_string(sc) + "\n\n";
211215
});
212216

213-
const auto nc_contraints = generator.get_not_contains_constraints();
214217
axioms = std::accumulate(
215-
nc_contraints.begin(),
216-
nc_contraints.end(),
218+
constraints.not_contains.begin(),
219+
constraints.not_contains.end(),
217220
axioms,
218221
[&](const std::string &accu, string_not_contains_constraintt sc) {
219222
simplify(sc, ns);
220-
generator.witness[sc] = generator.fresh_symbol("w", t.witness_type());
223+
witnesses[sc] = generator.fresh_symbol("w", t.witness_type());
221224
nc_axioms.push_back(sc);
222225
std::string s;
223226
java_lang->from_expr(sc, s, ns);
224227
return accu + s + "\n\n";
225228
});
226229

227-
const auto lemmas = generator.get_lemmas();
228230
axioms = std::accumulate(
229-
lemmas.begin(),
230-
lemmas.end(),
231+
constraints.existential.begin(),
232+
constraints.existential.end(),
231233
axioms,
232234
[&](const std::string &accu, exprt axiom) {
233235
simplify(axiom, ns);
@@ -251,8 +253,8 @@ SCENARIO("instantiate_not_contains",
251253
// Instantiate the lemmas
252254
for(const auto &axiom : nc_axioms)
253255
{
254-
const std::vector<exprt> l=instantiate_not_contains(
255-
axiom, product(index_set_ab, index_set_b), generator);
256+
const std::vector<exprt> l = instantiate_not_contains(
257+
axiom, product(index_set_ab, index_set_b), witnesses);
256258
lemmas.insert(lemmas.end(), l.begin(), l.end());
257259
}
258260

@@ -294,8 +296,8 @@ SCENARIO("instantiate_not_contains",
294296
symbol_tablet symtab;
295297
const namespacet empty_ns(symtab);
296298
string_constraint_generatort generator(ns);
297-
generator.witness[vacuous]=
298-
generator.fresh_symbol("w", t.witness_type());
299+
std::map<string_not_contains_constraintt, symbol_exprt> witnesses;
300+
witnesses[vacuous] = generator.fresh_symbol("w", t.witness_type());
299301

300302
INFO("Original axiom:\n");
301303
std::string s;
@@ -308,8 +310,8 @@ SCENARIO("instantiate_not_contains",
308310
const std::set<exprt> index_set_a = full_index_set(a_array);
309311

310312
// Instantiate the lemmas
311-
std::vector<exprt> lemmas=instantiate_not_contains(
312-
vacuous, product(index_set_a, index_set_a), generator);
313+
std::vector<exprt> lemmas = instantiate_not_contains(
314+
vacuous, product(index_set_a, index_set_a), witnesses);
313315

314316
const exprt conj=combine_lemmas(lemmas, ns);
315317
const std::string info=create_info(lemmas, ns);
@@ -349,8 +351,8 @@ SCENARIO("instantiate_not_contains",
349351
symbol_tablet symtab;
350352
const namespacet ns(symtab);
351353
string_constraint_generatort generator(ns);
352-
generator.witness[trivial]=
353-
generator.fresh_symbol("w", t.witness_type());
354+
std::map<string_not_contains_constraintt, symbol_exprt> witnesses;
355+
witnesses[trivial] = generator.fresh_symbol("w", t.witness_type());
354356

355357
INFO("Original axiom:\n");
356358
std::string s;
@@ -364,8 +366,8 @@ SCENARIO("instantiate_not_contains",
364366
const std::set<exprt> index_set_b = full_index_set(b_array);
365367

366368
// Instantiate the lemmas
367-
std::vector<exprt> lemmas=instantiate_not_contains(
368-
trivial, product(index_set_a, index_set_b), generator);
369+
std::vector<exprt> lemmas = instantiate_not_contains(
370+
trivial, product(index_set_a, index_set_b), witnesses);
369371

370372
const exprt conj=combine_lemmas(lemmas, ns);
371373
const std::string info=create_info(lemmas, ns);
@@ -405,8 +407,8 @@ SCENARIO("instantiate_not_contains",
405407
symbol_tablet symtab;
406408
const namespacet empty_ns(symtab);
407409
string_constraint_generatort generator(ns);
408-
generator.witness[trivial]=
409-
generator.fresh_symbol("w", t.witness_type());
410+
std::map<string_not_contains_constraintt, symbol_exprt> witnesses;
411+
witnesses[trivial] = generator.fresh_symbol("w", t.witness_type());
410412

411413
INFO("Original axiom:\n");
412414
std::string s;
@@ -417,12 +419,12 @@ SCENARIO("instantiate_not_contains",
417419
{
418420
// Making index sets
419421
const std::set<exprt> index_set_a = full_index_set(a_array);
420-
const std::set<exprt> index_set_empty=
421-
{generator.fresh_exist_index("z", t.length_type())};
422+
const std::set<exprt> index_set_empty = {
423+
generator.fresh_symbol("z", t.length_type())};
422424

423425
// Instantiate the lemmas
424-
std::vector<exprt> lemmas=instantiate_not_contains(
425-
trivial, product(index_set_a, index_set_empty), generator);
426+
std::vector<exprt> lemmas = instantiate_not_contains(
427+
trivial, product(index_set_a, index_set_empty), witnesses);
426428

427429
const exprt conj=combine_lemmas(lemmas, ns);
428430
const std::string info=create_info(lemmas, ns);
@@ -464,8 +466,8 @@ SCENARIO("instantiate_not_contains",
464466
const namespacet empty_ns(symtab);
465467

466468
string_constraint_generatort generator(ns);
467-
generator.witness[trivial]=
468-
generator.fresh_symbol("w", t.witness_type());
469+
std::map<string_not_contains_constraintt, symbol_exprt> witnesses;
470+
witnesses[trivial] = generator.fresh_symbol("w", t.witness_type());
469471

470472
INFO("Original axiom:\n");
471473
std::string s;
@@ -478,8 +480,8 @@ SCENARIO("instantiate_not_contains",
478480
const std::set<exprt> index_set_ab = full_index_set(ab_array);
479481

480482
// Instantiate the lemmas
481-
std::vector<exprt> lemmas=instantiate_not_contains(
482-
trivial, product(index_set_ab, index_set_ab), generator);
483+
std::vector<exprt> lemmas = instantiate_not_contains(
484+
trivial, product(index_set_ab, index_set_ab), witnesses);
483485

484486
const exprt conj=combine_lemmas(lemmas, ns);
485487
const std::string info=create_info(lemmas, ns);
@@ -520,8 +522,8 @@ SCENARIO("instantiate_not_contains",
520522
symbol_tablet symtab;
521523
const namespacet empty_ns(symtab);
522524
string_constraint_generatort generator(ns);
523-
generator.witness[trivial]=
524-
generator.fresh_symbol("w", t.witness_type());
525+
std::map<string_not_contains_constraintt, symbol_exprt> witnesses;
526+
witnesses[trivial] = generator.fresh_symbol("w", t.witness_type());
525527

526528
INFO("Original axiom:\n");
527529
std::string s;
@@ -535,8 +537,8 @@ SCENARIO("instantiate_not_contains",
535537
const std::set<exprt> index_set_cd = full_index_set(cd_array);
536538

537539
// Instantiate the lemmas
538-
std::vector<exprt> lemmas=instantiate_not_contains(
539-
trivial, product(index_set_ab, index_set_cd), generator);
540+
std::vector<exprt> lemmas = instantiate_not_contains(
541+
trivial, product(index_set_ab, index_set_cd), witnesses);
540542

541543
const exprt conj=combine_lemmas(lemmas, ns);
542544
const std::string info=create_info(lemmas, ns);

0 commit comments

Comments
 (0)