16
16
#include < util/replace_expr.h>
17
17
#include < util/std_expr.h>
18
18
#include < util/std_types.h>
19
-
20
19
#include < util/ui_message.h>
21
20
22
21
#include < solvers/prop/prop.h>
@@ -39,6 +38,7 @@ arrayst::arrayst(
39
38
{
40
39
lazy_arrays = false ; // will be set to true when --refine is used
41
40
incremental_cache = false ; // for incremental solving
41
+ // get_array_constraints is true when --show-array-constraints is used
42
42
get_array_constraints = _get_array_constraints;
43
43
}
44
44
@@ -374,8 +374,7 @@ void arrayst::add_array_Ackermann_constraints()
374
374
lazy_constraintt lazy (lazy_typet::ARRAY_ACKERMANN,
375
375
implies_exprt (literal_exprt (indices_equal_lit), values_equal));
376
376
add_array_constraint (lazy, true ); // added lazily
377
- array_constraints_map[constraint_typet::ARRAY_ACKERMANN].push_back (
378
- lazy.lazy );
377
+ array_constraint_count[constraint_typet::ARRAY_ACKERMANN]++;
379
378
380
379
#if 0 // old code for adding, not significantly faster
381
380
prop.lcnf(!indices_equal_lit, convert(values_equal));
@@ -462,8 +461,7 @@ void arrayst::add_array_constraints_equality(
462
461
// equality constraints are not added lazily
463
462
// convert must be done to guarantee correct update of the index_set
464
463
prop.lcnf (!array_equality.l , convert (equality_expr));
465
- array_constraints_map[constraint_typet::ARRAY_EQUALITY].push_back (
466
- equality_expr);
464
+ array_constraint_count[constraint_typet::ARRAY_EQUALITY]++;
467
465
}
468
466
}
469
467
@@ -524,8 +522,7 @@ void arrayst::add_array_constraints(
524
522
lazy_constraintt lazy (lazy_typet::ARRAY_TYPECAST,
525
523
equal_exprt (index_expr1, index_expr2));
526
524
add_array_constraint (lazy, false ); // added immediately
527
- array_constraints_map[constraint_typet::ARRAY_TYPECAST].push_back (
528
- lazy.lazy );
525
+ array_constraint_count[constraint_typet::ARRAY_TYPECAST]++;
529
526
}
530
527
}
531
528
else if (expr.id ()==ID_index)
@@ -564,7 +561,7 @@ void arrayst::add_array_constraints_with(
564
561
lazy_constraintt lazy (
565
562
lazy_typet::ARRAY_WITH, equal_exprt (index_expr, value));
566
563
add_array_constraint (lazy, false ); // added immediately
567
- array_constraints_map [constraint_typet::ARRAY_WITH]. push_back (lazy. lazy ) ;
564
+ array_constraint_count [constraint_typet::ARRAY_WITH]++ ;
568
565
569
566
updated_indices.insert (index );
570
567
}
@@ -600,8 +597,7 @@ void arrayst::add_array_constraints_with(
600
597
literal_exprt (guard_lit)));
601
598
602
599
add_array_constraint (lazy, false ); // added immediately
603
- array_constraints_map[constraint_typet::ARRAY_WITH_OTHER].push_back (
604
- lazy.lazy );
600
+ array_constraint_count[constraint_typet::ARRAY_WITH]++;
605
601
606
602
#if 0 // old code for adding, not significantly faster
607
603
{
@@ -697,7 +693,7 @@ void arrayst::add_array_constraints_array_of(
697
693
lazy_constraintt lazy (
698
694
lazy_typet::ARRAY_OF, equal_exprt (index_expr, expr.what ()));
699
695
add_array_constraint (lazy, false ); // added immediately
700
- array_constraints_map [constraint_typet::ARRAY_OF]. push_back (lazy. lazy ) ;
696
+ array_constraint_count [constraint_typet::ARRAY_OF]++ ;
701
697
}
702
698
}
703
699
@@ -733,8 +729,7 @@ void arrayst::add_array_constraints_array_constant(
733
729
lazy_constraintt lazy{lazy_typet::ARRAY_CONSTANT,
734
730
equal_exprt{index_expr, v}};
735
731
add_array_constraint (lazy, false ); // added immediately
736
- array_constraints_map[constraint_typet::ARRAY_CONSTANT].push_back (
737
- lazy.lazy );
732
+ array_constraint_count[constraint_typet::ARRAY_CONSTANT]++;
738
733
}
739
734
else
740
735
{
@@ -777,8 +772,7 @@ void arrayst::add_array_constraints_array_constant(
777
772
implies_exprt{index_constraint,
778
773
equal_exprt{index_expr, operands[range.first ]}}};
779
774
add_array_constraint (lazy, true ); // added lazily
780
- array_constraints_map[constraint_typet::ARRAY_NON_CONSTANT].push_back (
781
- lazy.lazy );
775
+ array_constraint_count[constraint_typet::ARRAY_CONSTANT]++;
782
776
}
783
777
}
784
778
}
@@ -804,8 +798,7 @@ void arrayst::add_array_constraints_comprehension(
804
798
equal_exprt (index_expr, comprehension_body));
805
799
806
800
add_array_constraint (lazy, false ); // added immediately
807
- array_constraints_map[constraint_typet::ARRAY_COMPREHENSION].push_back (
808
- lazy.lazy );
801
+ array_constraint_count[constraint_typet::ARRAY_COMPREHENSION]++;
809
802
}
810
803
}
811
804
@@ -833,7 +826,7 @@ void arrayst::add_array_constraints_if(
833
826
or_exprt (literal_exprt (!cond_lit),
834
827
equal_exprt (index_expr1, index_expr2)));
835
828
add_array_constraint (lazy, false ); // added immediately
836
- array_constraints_map [constraint_typet::ARRAY_IF_TRUE]. push_back (lazy. lazy ) ;
829
+ array_constraint_count [constraint_typet::ARRAY_IF]++ ;
837
830
838
831
#if 0 // old code for adding, not significantly faster
839
832
prop.lcnf(!cond_lit, convert(equal_exprt(index_expr1, index_expr2)));
@@ -853,8 +846,7 @@ void arrayst::add_array_constraints_if(
853
846
or_exprt (literal_exprt (cond_lit),
854
847
equal_exprt (index_expr1, index_expr2)));
855
848
add_array_constraint (lazy, false ); // added immediately
856
- array_constraints_map[constraint_typet::ARRAY_IF_FALSE].push_back (
857
- lazy.lazy );
849
+ array_constraint_count[constraint_typet::ARRAY_IF]++;
858
850
859
851
#if 0 // old code for adding, not significantly faster
860
852
prop.lcnf(cond_lit, convert(equal_exprt(index_expr1, index_expr2)));
@@ -868,56 +860,41 @@ std::string arrayst::enum_to_string(constraint_typet type)
868
860
{
869
861
case constraint_typet::ARRAY_ACKERMANN:
870
862
return " arrayAckermann" ;
871
- case constraint_typet::ARRAY_EQUALITY:
872
- return " arrayEquality" ;
873
863
case constraint_typet::ARRAY_WITH:
874
864
return " arrayWith" ;
875
- case constraint_typet::ARRAY_WITH_OTHER:
876
- return " arrayWithOther" ;
877
- case constraint_typet::ARRAY_IF_TRUE:
878
- return " arrayIfTrue" ;
879
- case constraint_typet::ARRAY_IF_FALSE:
880
- return " arrayIfFalse" ;
865
+ case constraint_typet::ARRAY_IF:
866
+ return " arrayIf" ;
881
867
case constraint_typet::ARRAY_OF:
882
868
return " arrayOf" ;
883
869
case constraint_typet::ARRAY_TYPECAST:
884
870
return " arrayTypecast" ;
885
871
case constraint_typet::ARRAY_CONSTANT:
886
872
return " arrayConstant" ;
887
- case constraint_typet::ARRAY_NON_CONSTANT:
888
- return " arrayNonConstant" ;
889
873
case constraint_typet::ARRAY_COMPREHENSION:
890
874
return " arrayComprehension" ;
875
+ case constraint_typet::ARRAY_EQUALITY:
876
+ return " arrayEquality" ;
891
877
default :
892
878
UNREACHABLE;
893
879
}
894
880
}
895
881
896
- void arrayst::display_constraints ()
882
+ void arrayst::display_array_constraint_count ()
897
883
{
898
884
json_objectt json_result;
899
885
json_objectt &json_array_theory =
900
886
json_result[" arrayConstraints" ].make_object ();
901
887
902
888
size_t num_constraints = 0 ;
903
889
904
- array_constraints_mapt ::iterator it = array_constraints_map .begin ();
905
- while (it != array_constraints_map .end ())
890
+ array_constraint_countt ::iterator it = array_constraint_count .begin ();
891
+ while (it != array_constraint_count .end ())
906
892
{
907
893
std::string contraint_type_string = enum_to_string (it->first );
908
- json_arrayt &json_constraint_list =
909
- json_array_theory[contraint_type_string].make_array ();
910
-
911
- array_constraintst::iterator constraint_it = it->second .begin ();
912
- while (constraint_it != it->second .end ())
913
- {
914
- std::stringstream ss;
915
- ss << format (*constraint_it);
916
- json_constraint_list.push_back (json_stringt (ss.str ()));
894
+ json_array_theory[contraint_type_string] =
895
+ json_numbert (std::to_string (it->second ));
917
896
918
- constraint_it++;
919
- num_constraints++;
920
- }
897
+ num_constraints += it->second ;
921
898
it++;
922
899
}
923
900
0 commit comments