Skip to content

Commit 1c3395a

Browse files
Natasha Yogananda Jeppudanielsn
Natasha Yogananda Jeppu
authored andcommitted
Add utility and module to track array constraints and display in json format
This commit adds utilities to track array constraints and also the type of constraint being added, eg: ackermann constraint, array_of etc. Added a new enum class constraint_typet which is an extension of lazy_typet. This enum class includes a separate value for constraints added for other indices array_with, constraints added for the 'true' and 'false branches of if etc in addition to those available in lazy_typet. Also define a new member of type std::map that tracks mapping between type of constraint and the constraint itself. Currently support json output. clang format arrays.cpp
1 parent 6d9385c commit 1c3395a

File tree

1 file changed

+49
-49
lines changed

1 file changed

+49
-49
lines changed

src/solvers/flattening/arrays.cpp

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ Author: Daniel Kroening, [email protected]
1010

1111
#include <util/arith_tools.h>
1212
#include <util/format_expr.h>
13+
#include <util/json_irep.h>
14+
#include <util/message.h>
1315
#include <util/namespace.h>
1416
#include <util/replace_expr.h>
1517
#include <util/std_expr.h>
1618
#include <util/std_types.h>
17-
#include <util/json_irep.h>
18-
#include <util/message.h>
19+
1920
#include <util/ui_message.h>
2021

2122
#include <solvers/prop/prop.h>
@@ -31,7 +32,9 @@ arrayst::arrayst(
3132
propt &_prop,
3233
message_handlert &_message_handler,
3334
bool _get_array_constraints)
34-
: equalityt(_prop, _message_handler), ns(_ns), log(_message_handler),
35+
: equalityt(_prop, _message_handler),
36+
ns(_ns),
37+
log(_message_handler),
3538
message_handler(_message_handler)
3639
{
3740
lazy_arrays = false; // will be set to true when --refine is used
@@ -371,8 +374,8 @@ void arrayst::add_array_Ackermann_constraints()
371374
lazy_constraintt lazy(lazy_typet::ARRAY_ACKERMANN,
372375
implies_exprt(literal_exprt(indices_equal_lit), values_equal));
373376
add_array_constraint(lazy, true); // added lazily
374-
array_constraints_map[
375-
constraint_typet::ARRAY_ACKERMANN].push_back(lazy.lazy);
377+
array_constraints_map[constraint_typet::ARRAY_ACKERMANN].push_back(
378+
lazy.lazy);
376379

377380
#if 0 // old code for adding, not significantly faster
378381
prop.lcnf(!indices_equal_lit, convert(values_equal));
@@ -459,8 +462,8 @@ void arrayst::add_array_constraints_equality(
459462
// equality constraints are not added lazily
460463
// convert must be done to guarantee correct update of the index_set
461464
prop.lcnf(!array_equality.l, convert(equality_expr));
462-
array_constraints_map[
463-
constraint_typet::ARRAY_EQUALITY].push_back(equality_expr);
465+
array_constraints_map[constraint_typet::ARRAY_EQUALITY].push_back(
466+
equality_expr);
464467
}
465468
}
466469

@@ -521,8 +524,8 @@ void arrayst::add_array_constraints(
521524
lazy_constraintt lazy(lazy_typet::ARRAY_TYPECAST,
522525
equal_exprt(index_expr1, index_expr2));
523526
add_array_constraint(lazy, false); // added immediately
524-
array_constraints_map[
525-
constraint_typet::ARRAY_TYPECAST].push_back(lazy.lazy);
527+
array_constraints_map[constraint_typet::ARRAY_TYPECAST].push_back(
528+
lazy.lazy);
526529
}
527530
}
528531
else if(expr.id()==ID_index)
@@ -561,8 +564,7 @@ void arrayst::add_array_constraints_with(
561564
lazy_constraintt lazy(
562565
lazy_typet::ARRAY_WITH, equal_exprt(index_expr, value));
563566
add_array_constraint(lazy, false); // added immediately
564-
array_constraints_map[
565-
constraint_typet::ARRAY_WITH].push_back(lazy.lazy);
567+
array_constraints_map[constraint_typet::ARRAY_WITH].push_back(lazy.lazy);
566568

567569
updated_indices.insert(index);
568570
}
@@ -598,8 +600,8 @@ void arrayst::add_array_constraints_with(
598600
literal_exprt(guard_lit)));
599601

600602
add_array_constraint(lazy, false); // added immediately
601-
array_constraints_map[
602-
constraint_typet::ARRAY_WITH_OTHER].push_back(lazy.lazy);
603+
array_constraints_map[constraint_typet::ARRAY_WITH_OTHER].push_back(
604+
lazy.lazy);
603605

604606
#if 0 // old code for adding, not significantly faster
605607
{
@@ -695,8 +697,7 @@ void arrayst::add_array_constraints_array_of(
695697
lazy_constraintt lazy(
696698
lazy_typet::ARRAY_OF, equal_exprt(index_expr, expr.what()));
697699
add_array_constraint(lazy, false); // added immediately
698-
array_constraints_map[
699-
constraint_typet::ARRAY_OF].push_back(lazy.lazy);
700+
array_constraints_map[constraint_typet::ARRAY_OF].push_back(lazy.lazy);
700701
}
701702
}
702703

@@ -732,8 +733,8 @@ void arrayst::add_array_constraints_array_constant(
732733
lazy_constraintt lazy{lazy_typet::ARRAY_CONSTANT,
733734
equal_exprt{index_expr, v}};
734735
add_array_constraint(lazy, false); // added immediately
735-
array_constraints_map[
736-
constraint_typet::ARRAY_CONSTANT].push_back(lazy.lazy);
736+
array_constraints_map[constraint_typet::ARRAY_CONSTANT].push_back(
737+
lazy.lazy);
737738
}
738739
else
739740
{
@@ -776,8 +777,8 @@ void arrayst::add_array_constraints_array_constant(
776777
implies_exprt{index_constraint,
777778
equal_exprt{index_expr, operands[range.first]}}};
778779
add_array_constraint(lazy, true); // added lazily
779-
array_constraints_map[
780-
constraint_typet::ARRAY_NON_CONSTANT].push_back(lazy.lazy);
780+
array_constraints_map[constraint_typet::ARRAY_NON_CONSTANT].push_back(
781+
lazy.lazy);
781782
}
782783
}
783784
}
@@ -803,8 +804,8 @@ void arrayst::add_array_constraints_comprehension(
803804
equal_exprt(index_expr, comprehension_body));
804805

805806
add_array_constraint(lazy, false); // added immediately
806-
array_constraints_map[
807-
constraint_typet::ARRAY_COMPREHENSION].push_back(lazy.lazy);
807+
array_constraints_map[constraint_typet::ARRAY_COMPREHENSION].push_back(
808+
lazy.lazy);
808809
}
809810
}
810811

@@ -832,8 +833,7 @@ void arrayst::add_array_constraints_if(
832833
or_exprt(literal_exprt(!cond_lit),
833834
equal_exprt(index_expr1, index_expr2)));
834835
add_array_constraint(lazy, false); // added immediately
835-
array_constraints_map[
836-
constraint_typet::ARRAY_IF_TRUE].push_back(lazy.lazy);
836+
array_constraints_map[constraint_typet::ARRAY_IF_TRUE].push_back(lazy.lazy);
837837

838838
#if 0 // old code for adding, not significantly faster
839839
prop.lcnf(!cond_lit, convert(equal_exprt(index_expr1, index_expr2)));
@@ -853,8 +853,8 @@ void arrayst::add_array_constraints_if(
853853
or_exprt(literal_exprt(cond_lit),
854854
equal_exprt(index_expr1, index_expr2)));
855855
add_array_constraint(lazy, false); // added immediately
856-
array_constraints_map[
857-
constraint_typet::ARRAY_IF_FALSE].push_back(lazy.lazy);
856+
array_constraints_map[constraint_typet::ARRAY_IF_FALSE].push_back(
857+
lazy.lazy);
858858

859859
#if 0 // old code for adding, not significantly faster
860860
prop.lcnf(cond_lit, convert(equal_exprt(index_expr1, index_expr2)));
@@ -866,30 +866,30 @@ std::string arrayst::enum_to_string(constraint_typet type)
866866
{
867867
switch(type)
868868
{
869-
case constraint_typet::ARRAY_ACKERMANN:
870-
return "arrayAckermann";
871-
case constraint_typet::ARRAY_EQUALITY:
872-
return "arrayEquality";
873-
case constraint_typet::ARRAY_WITH:
874-
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";
881-
case constraint_typet::ARRAY_OF:
882-
return "arrayOf";
883-
case constraint_typet::ARRAY_TYPECAST:
884-
return "arrayTypecast";
885-
case constraint_typet::ARRAY_CONSTANT:
886-
return "arrayConstant";
887-
case constraint_typet::ARRAY_NON_CONSTANT:
888-
return "arrayNonConstant";
889-
case constraint_typet::ARRAY_COMPREHENSION:
890-
return "arrayComprehension";
891-
default:
892-
UNREACHABLE;
869+
case constraint_typet::ARRAY_ACKERMANN:
870+
return "arrayAckermann";
871+
case constraint_typet::ARRAY_EQUALITY:
872+
return "arrayEquality";
873+
case constraint_typet::ARRAY_WITH:
874+
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";
881+
case constraint_typet::ARRAY_OF:
882+
return "arrayOf";
883+
case constraint_typet::ARRAY_TYPECAST:
884+
return "arrayTypecast";
885+
case constraint_typet::ARRAY_CONSTANT:
886+
return "arrayConstant";
887+
case constraint_typet::ARRAY_NON_CONSTANT:
888+
return "arrayNonConstant";
889+
case constraint_typet::ARRAY_COMPREHENSION:
890+
return "arrayComprehension";
891+
default:
892+
UNREACHABLE;
893893
}
894894
}
895895

0 commit comments

Comments
 (0)