void GetImplySufficient(CheckerFrame *frame, Vector<Bit*> *imply_list) { // only getting implications for loops for now. if (frame->Kind() != B_Loop) return; // look for assumed bits of the form 'A || B'. // then check if either !A or !B is a sufficient condition // (this will force the other half of the implication to hold). for (size_t bind = 0; bind < frame->m_assumed_bits.Size(); bind++) { Bit *bit = frame->m_assumed_bits[bind]; if (bit->Kind() == BIT_Or) { for (size_t oind = 0; oind < bit->GetOperandCount(); oind++) { Bit *op = bit->GetOperand(oind); Bit *nop = Bit::MakeNot(op); if (!imply_list->Contains(nop)) imply_list->PushBack(nop); } } } }