Exemple #1
0
sequence_in_t TeacherBB::equivalenceQuery(const unique_ptr<DFSM>& conjecture) {
	_equivalenceQueryCounter++;
	auto tmp = _currState;
	auto model = FSMmodel::duplicateFSM(conjecture);
	if (!model->isReduced()) model->minimize();
	for (state_t extraStates = 0; extraStates < _maxExtraStates; extraStates++) {
		auto TS = _testingMethod(model, extraStates);
		for (const auto& test : TS) {
			auto bbOut = resetAndOutputQuery(test);
			_outputQueryCounter--;
			sequence_out_t modelOut;
			state_t state = 0;
			for (const auto& input : test) {
				auto ns = model->getNextState(state, input);
				if ((ns != NULL_STATE) && (ns != WRONG_STATE)) {
					modelOut.emplace_back(model->getOutput(state, input));
					state = ns;
				}
				else modelOut.emplace_back(WRONG_OUTPUT);
			}
			if (bbOut != modelOut) {
				_currState = tmp;
				return test;
			}
		}
	}
	_currState = tmp;
	return sequence_in_t();
}
void LatticeReduction::reduce2(Vector&a,Vector&b,Vector&c){
  Vector v[3];
  v[0]=a; v[1]=b; v[2]=c;
  int iter=0;
  int ok=0;
  while(ok<3){
    int i,j;
    if(iter%3==0){
      i=0; j=1;
    } else if(iter%3==1){
      i=0; j=2;
    } else {
      i=1; j=2;
    }
    if(isReduced(v[i],v[j])) ok++;
    else {
      reduce(v[i],v[j]);
      ok=1;
    }
    iter++;
  }
  a=v[0]; b=v[1]; c=v[2];
}
bool LatticeReduction::isReduced2(const Vector&a,const Vector&b,const Vector &c){
  return isReduced(a,b) && isReduced(a,b) && isReduced(b,c);
}