1111#include < util/arith_tools.h>
1212#include < util/bitvector_expr.h>
1313#include < util/ebmc_util.h>
14+ #include < util/expr_util.h>
1415#include < util/mathematical_expr.h>
1516#include < util/namespace.h>
1617#include < util/std_expr.h>
2526#include " instantiate_netlist.h"
2627#include " netlist.h"
2728
29+ #include < algorithm>
30+
2831/* ******************************************************************\
2932
3033 Class: convert_trans_to_netlistt
@@ -78,8 +81,9 @@ class convert_trans_to_netlistt:public messaget
7881
7982 typedef std::list<exprt> constraint_listt;
8083 constraint_listt constraint_list;
81- bvt transition_constraints;
82-
84+
85+ bvt invar_constraints, transition_constraints;
86+
8387 class rhst
8488 {
8589 public:
@@ -299,7 +303,10 @@ void convert_trans_to_netlistt::operator()(const irep_idt &module)
299303
300304 // do the remaining transition constraints
301305 convert_constraints (aig_prop);
302-
306+
307+ dest.constraints .insert (
308+ dest.constraints .end (), invar_constraints.begin (), invar_constraints.end ());
309+
303310 dest.transition .insert (
304311 dest.transition .end (),
305312 transition_constraints.begin (),
@@ -402,6 +409,9 @@ Function: convert_trans_to_netlistt::convert_constraints
402409
403410void convert_trans_to_netlistt::convert_constraints (propt &prop)
404411{
412+ invar_constraints.reserve (
413+ transition_constraints.size () + constraint_list.size ());
414+
405415 transition_constraints.reserve (
406416 transition_constraints.size ()+constraint_list.size ());
407417
@@ -412,7 +422,11 @@ void convert_trans_to_netlistt::convert_constraints(propt &prop)
412422 {
413423 literalt l=
414424 instantiate_convert (prop, dest.var_map , *it, ns, get_message_handler ());
415- transition_constraints.push_back (l);
425+
426+ if (has_subexpr (*it, ID_next_symbol))
427+ transition_constraints.push_back (l);
428+ else
429+ invar_constraints.push_back (l);
416430 }
417431}
418432
0 commit comments