Проверка модели CBMC

Я пытаюсь ограничить стол b[4][4] такой, что только те места, которые имеют i>=j и удовлетворяя условию, что (stored[i] & stored[j]) == stored[i] будет 1, а остальные будут 0.

Почему это не работает?

void main(){
  unsigned int i = 0  , j = 0; 
  _Bool b[4][4];
  bitvector stored[4] = {111,001,010,000};
  for(i=0;i<4;i++){
     for(j=0;j<4;j++){
      __CPROVER_assume( !(b[i][j]) || ((i>=j) && (stored[i] & stored[j] == stored[i])));  
      }
   }

Предположим, что пытаемся получить эффект, который b[i][j] == 1 должно подразумевать stored[i]& stored[j] == stored[i], Но вывод не имеет этого эффекта. В чем проблема? Я новичок в CBMC и C также.

1 ответ

Решение

Обратите внимание, что значения в bitvector stored[4] = {111,001,010,000}; находятся в базе 10.

Вы имеете в виду базу 2 {0b111,0b001,0b010,0b000}?

Другие вопросы по тегам