void bv_refinementt::post_process_arrays() { collect_indices(); // at this point all indices should in the index set // just build the data structure update_index_map(); // we don't actually add any constraints lazy_arrays = do_array_refinement; add_array_constraints(); freeze_lazy_constraints(); }
void bv_refinementt::arrays_overapproximated() { // build index_map with values index_mapt value_index_map; value_index_map.resize(index_map.size()); #if 0 // iterate over *roots* for(unsigned i=0; i<arrays.size(); i++) { if(!arrays.is_root_number(i)) continue; unsigned root_number=arrays.find_number(i); assert(root_number!=i); index_sett &root_index_set=index_map[root_number]; index_sett &index_set=index_map[i]; root_index_set.insert(index_set.begin(), index_set.end()); } // check constraints for if, with, array_of for(unsigned i=0; i<arrays.size(); i++) add_array_constraints( index_map[arrays.find_number(i)], arrays[i]); // check constraints for equalities for(array_equalitiest::const_iterator it= array_equalities.begin(); it!=array_equalities.end(); it++) add_array_constraints( index_map[arrays.find_number(it->f1)], *it); #endif }
void arrayst::add_array_constraints() { // first get index map build_index_map(); // add constraints for if, with, array_of for(unsigned i=0; i<arrays.size(); i++) add_array_constraints( index_map[arrays.find_number(i)], arrays[i]); // add constraints for equalities for(array_equalitiest::const_iterator it= array_equalities.begin(); it!=array_equalities.end(); it++) add_array_constraints( index_map[arrays.find_number(it->f1)], *it); // add the Ackermann constraints add_array_Ackermann_constraints(); }