19
19
20
20
#include < solvers/refinement/string_refinement.h>
21
21
22
- #include < sstream>
23
22
#include < iomanip>
24
23
#include < stack>
25
24
#include < functional>
26
- #include < ansi-c/string_constant.h>
27
- #include < util/cprover_prefix.h>
28
25
#include < util/expr_iterator.h>
29
- #include < util/replace_expr.h>
30
- #include < util/refined_string_type.h>
31
26
#include < util/simplify_expr.h>
32
27
#include < solvers/sat/satcheck.h>
33
- #include < solvers/refinement/string_refinement_invariant.h>
34
28
#include < solvers/refinement/string_constraint_instantiation.h>
35
- #include < langapi/language_util.h>
36
29
#include < java_bytecode/java_types.h>
37
30
#include < util/optional.h>
38
31
@@ -86,7 +79,7 @@ static void update_index_set(
86
79
std::map<exprt, std::set<exprt>> &index_set,
87
80
std::map<exprt, std::set<exprt>> ¤t_index_set,
88
81
const namespacet &ns,
89
- const std::vector<exprt> &cur );
82
+ const std::vector<exprt> ¤t_constraints );
90
83
91
84
static void update_index_set (
92
85
std::map<exprt, std::set<exprt>> &index_set,
@@ -690,14 +683,14 @@ decision_proceduret::resultt string_refinementt::dec_solve()
690
683
replace_expr (symbol_resolve, axiom);
691
684
if (axiom.id ()==ID_string_constraint)
692
685
{
693
- string_constraintt nc_axiom =
686
+ string_constraintt univ_axiom =
694
687
to_string_constraint (axiom);
695
- is_valid_string_constraint (error (), ns, nc_axiom );
688
+ is_valid_string_constraint (error (), ns, univ_axiom );
696
689
DATA_INVARIANT (
697
- is_valid_string_constraint (error (), ns, nc_axiom ),
690
+ is_valid_string_constraint (error (), ns, univ_axiom ),
698
691
string_refinement_invariantt (
699
692
" string constraints satisfy their invariant" ));
700
- universal_axioms.push_back (nc_axiom );
693
+ universal_axioms.push_back (univ_axiom );
701
694
}
702
695
else if (axiom.id ()==ID_string_not_contains_constraint)
703
696
{
@@ -725,9 +718,9 @@ decision_proceduret::resultt string_refinementt::dec_solve()
725
718
decision_proceduret::resultt res=supert::dec_solve ();
726
719
if (res==resultt::D_SATISFIABLE)
727
720
{
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 (
731
724
universal_axioms,
732
725
not_contains_axioms,
733
726
generator,
@@ -738,10 +731,10 @@ decision_proceduret::resultt string_refinementt::dec_solve()
738
731
config_.use_counter_example ,
739
732
supert::config_.ui ,
740
733
symbol_resolve);
741
- if (!success )
734
+ if (!satisfied )
742
735
{
743
- for (const auto &lemma : lemmas )
744
- add_lemma (lemma );
736
+ for (const auto &counter : counter_examples )
737
+ add_lemma (counter );
745
738
debug () << " check_SAT: got SAT but the model is not correct" << eom;
746
739
}
747
740
else
@@ -757,11 +750,11 @@ decision_proceduret::resultt string_refinementt::dec_solve()
757
750
}
758
751
759
752
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 :
763
756
generate_instantiations (debug (), current_index_set, universal_axioms))
764
- add_lemma (lemma );
757
+ add_lemma (instance );
765
758
display_current_index_set (debug (), ns, current_index_set);
766
759
767
760
while ((loop_bound_--)>0 )
@@ -770,9 +763,9 @@ decision_proceduret::resultt string_refinementt::dec_solve()
770
763
771
764
if (res==resultt::D_SATISFIABLE)
772
765
{
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 (
776
769
universal_axioms,
777
770
not_contains_axioms,
778
771
generator,
@@ -783,10 +776,10 @@ decision_proceduret::resultt string_refinementt::dec_solve()
783
776
config_.use_counter_example ,
784
777
supert::config_.ui ,
785
778
symbol_resolve);
786
- if (!success )
779
+ if (!satisfied )
787
780
{
788
- for (const auto &lemma : lemmas )
789
- add_lemma (lemma );
781
+ for (const auto &counter : counter_examples )
782
+ add_lemma (counter );
790
783
debug () << " check_SAT: got SAT but the model is not correct" << eom;
791
784
}
792
785
else
@@ -806,8 +799,8 @@ decision_proceduret::resultt string_refinementt::dec_solve()
806
799
// and instantiating universal formulas with this indices.
807
800
// We will then relaunch the solver with these added lemmas.
808
801
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 ();
811
804
for (const auto &lemma :
812
805
generate_instantiations (
813
806
debug (), current_index_set, universal_axioms))
@@ -849,16 +842,16 @@ decision_proceduret::resultt string_refinementt::dec_solve()
849
842
for (unsigned i=0 ; i<not_contains_axioms.size (); i++)
850
843
{
851
844
debug () << " constraint " << i << ' \n ' ;
852
- const std::vector<exprt> lemmas =
845
+ const std::vector<exprt> instances =
853
846
instantiate_not_contains (
854
847
debug (),
855
848
ns,
856
849
not_contains_axioms[i],
857
850
index_set,
858
851
current_index_set,
859
852
generator);
860
- for (const exprt &lemma : lemmas )
861
- add_lemma (lemma );
853
+ for (const exprt &instance : instances )
854
+ add_lemma (instance );
862
855
}
863
856
}
864
857
else
@@ -872,18 +865,6 @@ decision_proceduret::resultt string_refinementt::dec_solve()
872
865
return resultt::D_ERROR;
873
866
}
874
867
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
-
887
868
// / add the given lemma to the solver
888
869
// / \par parameters: a lemma and Boolean value stating whether the lemma should
889
870
// / be added to the index set.
@@ -893,7 +874,7 @@ void string_refinementt::add_lemma(
893
874
if (!seen_instances.insert (lemma).second )
894
875
return ;
895
876
896
- cur .push_back (lemma);
877
+ current_constraints .push_back (lemma);
897
878
898
879
exprt simple_lemma=lemma;
899
880
if (_simplify)
@@ -1762,9 +1743,9 @@ static void update_index_set(
1762
1743
std::map<exprt, std::set<exprt>> &index_set,
1763
1744
std::map<exprt, std::set<exprt>> ¤t_index_set,
1764
1745
const namespacet &ns,
1765
- const std::vector<exprt> &cur )
1746
+ const std::vector<exprt> ¤t_constraints )
1766
1747
{
1767
- for (const auto &axiom : cur )
1748
+ for (const auto &axiom : current_constraints )
1768
1749
update_index_set (index_set, current_index_set, ns, axiom);
1769
1750
}
1770
1751
0 commit comments