1919
2020#include < solvers/refinement/string_refinement.h>
2121
22- #include < sstream>
2322#include < iomanip>
2423#include < stack>
2524#include < functional>
26- #include < ansi-c/string_constant.h>
27- #include < util/cprover_prefix.h>
2825#include < util/expr_iterator.h>
29- #include < util/replace_expr.h>
30- #include < util/refined_string_type.h>
3126#include < util/simplify_expr.h>
3227#include < solvers/sat/satcheck.h>
33- #include < solvers/refinement/string_refinement_invariant.h>
3428#include < solvers/refinement/string_constraint_instantiation.h>
35- #include < langapi/language_util.h>
3629#include < java_bytecode/java_types.h>
3730#include < util/optional.h>
3831
@@ -86,7 +79,7 @@ static void update_index_set(
8679 std::map<exprt, std::set<exprt>> &index_set,
8780 std::map<exprt, std::set<exprt>> ¤t_index_set,
8881 const namespacet &ns,
89- const std::vector<exprt> &cur );
82+ const std::vector<exprt> ¤t_constraints );
9083
9184static void update_index_set (
9285 std::map<exprt, std::set<exprt>> &index_set,
@@ -690,14 +683,14 @@ decision_proceduret::resultt string_refinementt::dec_solve()
690683 replace_expr (symbol_resolve, axiom);
691684 if (axiom.id ()==ID_string_constraint)
692685 {
693- string_constraintt nc_axiom =
686+ string_constraintt univ_axiom =
694687 to_string_constraint (axiom);
695- is_valid_string_constraint (error (), ns, nc_axiom );
688+ is_valid_string_constraint (error (), ns, univ_axiom );
696689 DATA_INVARIANT (
697- is_valid_string_constraint (error (), ns, nc_axiom ),
690+ is_valid_string_constraint (error (), ns, univ_axiom ),
698691 string_refinement_invariantt (
699692 " string constraints satisfy their invariant" ));
700- universal_axioms.push_back (nc_axiom );
693+ universal_axioms.push_back (univ_axiom );
701694 }
702695 else if (axiom.id ()==ID_string_not_contains_constraint)
703696 {
@@ -725,9 +718,9 @@ decision_proceduret::resultt string_refinementt::dec_solve()
725718 decision_proceduret::resultt res=supert::dec_solve ();
726719 if (res==resultt::D_SATISFIABLE)
727720 {
728- bool success ;
729- std::vector<exprt> lemmas ;
730- std::tie (success, lemmas )=check_axioms (
721+ bool satisfied ;
722+ std::vector<exprt> counter_examples ;
723+ std::tie (satisfied, counter_examples )=check_axioms (
731724 universal_axioms,
732725 not_contains_axioms,
733726 generator,
@@ -738,10 +731,10 @@ decision_proceduret::resultt string_refinementt::dec_solve()
738731 config_.use_counter_example ,
739732 supert::config_.ui ,
740733 symbol_resolve);
741- if (!success )
734+ if (!satisfied )
742735 {
743- for (const auto &lemma : lemmas )
744- add_lemma (lemma );
736+ for (const auto &counter : counter_examples )
737+ add_lemma (counter );
745738 debug () << " check_SAT: got SAT but the model is not correct" << eom;
746739 }
747740 else
@@ -757,11 +750,11 @@ decision_proceduret::resultt string_refinementt::dec_solve()
757750 }
758751
759752 initial_index_set (index_set, current_index_set, ns, universal_axioms);
760- update_index_set (index_set, current_index_set, ns, cur );
761- cur .clear ();
762- for (const auto &lemma :
753+ update_index_set (index_set, current_index_set, ns, current_constraints );
754+ current_constraints .clear ();
755+ for (const auto &instance :
763756 generate_instantiations (debug (), current_index_set, universal_axioms))
764- add_lemma (lemma );
757+ add_lemma (instance );
765758 display_current_index_set (debug (), ns, current_index_set);
766759
767760 while ((loop_bound_--)>0 )
@@ -770,9 +763,9 @@ decision_proceduret::resultt string_refinementt::dec_solve()
770763
771764 if (res==resultt::D_SATISFIABLE)
772765 {
773- bool success ;
774- std::vector<exprt> lemmas ;
775- std::tie (success, lemmas )=check_axioms (
766+ bool satisfied ;
767+ std::vector<exprt> counter_examples ;
768+ std::tie (satisfied, counter_examples )=check_axioms (
776769 universal_axioms,
777770 not_contains_axioms,
778771 generator,
@@ -783,10 +776,10 @@ decision_proceduret::resultt string_refinementt::dec_solve()
783776 config_.use_counter_example ,
784777 supert::config_.ui ,
785778 symbol_resolve);
786- if (!success )
779+ if (!satisfied )
787780 {
788- for (const auto &lemma : lemmas )
789- add_lemma (lemma );
781+ for (const auto &counter : counter_examples )
782+ add_lemma (counter );
790783 debug () << " check_SAT: got SAT but the model is not correct" << eom;
791784 }
792785 else
@@ -806,8 +799,8 @@ decision_proceduret::resultt string_refinementt::dec_solve()
806799 // and instantiating universal formulas with this indices.
807800 // We will then relaunch the solver with these added lemmas.
808801 current_index_set.clear ();
809- update_index_set (index_set, current_index_set, ns, cur );
810- cur .clear ();
802+ update_index_set (index_set, current_index_set, ns, current_constraints );
803+ current_constraints .clear ();
811804 for (const auto &lemma :
812805 generate_instantiations (
813806 debug (), current_index_set, universal_axioms))
@@ -849,16 +842,16 @@ decision_proceduret::resultt string_refinementt::dec_solve()
849842 for (unsigned i=0 ; i<not_contains_axioms.size (); i++)
850843 {
851844 debug () << " constraint " << i << ' \n ' ;
852- const std::vector<exprt> lemmas =
845+ const std::vector<exprt> instances =
853846 instantiate_not_contains (
854847 debug (),
855848 ns,
856849 not_contains_axioms[i],
857850 index_set,
858851 current_index_set,
859852 generator);
860- for (const exprt &lemma : lemmas )
861- add_lemma (lemma );
853+ for (const exprt &instance : instances )
854+ add_lemma (instance );
862855 }
863856 }
864857 else
@@ -872,18 +865,6 @@ decision_proceduret::resultt string_refinementt::dec_solve()
872865 return resultt::D_ERROR;
873866}
874867
875- // / fills as many 0 as necessary in the bit vectors to have the right width
876- // / \par parameters: a Boolean and a expression with the desired type
877- // / \return a bit vector
878- bvt string_refinementt::convert_bool_bv (const exprt &boole, const exprt &orig)
879- {
880- bvt ret;
881- ret.push_back (convert (boole));
882- size_t width=boolbv_width (orig.type ());
883- ret.resize (width, const_literal (false ));
884- return ret;
885- }
886-
887868// / add the given lemma to the solver
888869// / \par parameters: a lemma and Boolean value stating whether the lemma should
889870// / be added to the index set.
@@ -893,7 +874,7 @@ void string_refinementt::add_lemma(
893874 if (!seen_instances.insert (lemma).second )
894875 return ;
895876
896- cur .push_back (lemma);
877+ current_constraints .push_back (lemma);
897878
898879 exprt simple_lemma=lemma;
899880 if (_simplify)
@@ -1762,9 +1743,9 @@ static void update_index_set(
17621743 std::map<exprt, std::set<exprt>> &index_set,
17631744 std::map<exprt, std::set<exprt>> ¤t_index_set,
17641745 const namespacet &ns,
1765- const std::vector<exprt> &cur )
1746+ const std::vector<exprt> ¤t_constraints )
17661747{
1767- for (const auto &axiom : cur )
1748+ for (const auto &axiom : current_constraints )
17681749 update_index_set (index_set, current_index_set, ns, axiom);
17691750}
17701751
0 commit comments