diff --git a/src/ModelCheckLace.cpp b/src/ModelCheckLace.cpp index a66b767af1026d21dd65922d6ad4c4721b45c986..db840642b525c32a4627e680b60f078551c4c1c9 100644 --- a/src/ModelCheckLace.cpp +++ b/src/ModelCheckLace.cpp @@ -117,12 +117,12 @@ ModelCheckLace::ModelCheckLace(const NewNet &R, int BOUND,int nbThread) string ModelCheckLace::getTransition(int pos) { - m_graph->getTransition(pos); + return m_graph->getTransition(pos); } string ModelCheckLace::getPlace(int pos) { - m_graph->getPlace(pos); + return m_graph->getPlace(pos); } TASK_3 (MDD, Aggregate_epsilon_lace, MDD, From, Set*, nonObservable, vector<TransSylvan>*, tb_relation) @@ -169,6 +169,7 @@ TASK_3 (Set, fire_obs_lace,MDD, State, Set*, observable, vector<TransSylvan>*, t LDDState * ModelCheckLace::buildInitialMetaState() { + LDDState *c=new LDDState; LDDState *reached_class; LACE_ME; @@ -204,6 +205,7 @@ LDDState * ModelCheckLace::buildInitialMetaState() c->Successors.insert(c->Successors.begin(),LDDEdge(reached_class,t)); reached_class->Predecessors.insert(reached_class->Predecessors.begin(),LDDEdge(c,t)); } + return c; } diff --git a/src/SogKripkeIterator.cpp b/src/SogKripkeIterator.cpp index c60d0eae8afbb37110737ca69ec03629016b203e..f7de0915f81eb897c7b40e16ea8c039dbf1779d3 100644 --- a/src/SogKripkeIterator.cpp +++ b/src/SogKripkeIterator.cpp @@ -44,6 +44,7 @@ SogKripkeState* SogKripkeIterator::dst() const bdd SogKripkeIterator::cond() const { if (m_lsucc.at(m_current_edge).second==-1) return bddtrue; + string name=m_graph->getTransition(m_lsucc.at(m_current_edge).second); //cout<<"Value "<<m_lddstate->getSuccessors()->at(m_current_edge).second<<" Transition name "<<name<<endl; diff --git a/src/SogKripkeIteratorOTF.cpp b/src/SogKripkeIteratorOTF.cpp index c2f48285c146f1c55a78e9adafb2acb44f4056fb..12a1081cf50b19e9f1e9a663628bc8ac203930d4 100644 --- a/src/SogKripkeIteratorOTF.cpp +++ b/src/SogKripkeIteratorOTF.cpp @@ -6,7 +6,7 @@ SogKripkeIteratorOTF::SogKripkeIteratorOTF(const LDDState* lddstate, bdd cnd):m_lddstate(lddstate), kripke_succ_iterator(cnd) { - //vector<pair<LDDState*, int>> + m_lddstate->setDiv(true); for (int i=0;i<m_lddstate->getSuccessors()->size();i++) { m_lsucc.push_back(m_lddstate->getSuccessors()->at(i)); @@ -17,43 +17,52 @@ SogKripkeIteratorOTF::SogKripkeIteratorOTF(const LDDState* lddstate, bdd cnd):m_ if (lddstate->isDiv()) { m_lsucc.push_back(pair<LDDState*,int>(m_lddstate,-1)); } + } bool SogKripkeIteratorOTF::first() { // m_sog->getLDDStateById(m_id)->Successors(). //return m_sog->get_successor() - + cout<<"entering "<<__func__<<endl; m_current_edge=0; + cout<<"exciting "<<__func__<<endl; return m_lsucc.size()!=0; + } bool SogKripkeIteratorOTF::next() { - + cout<<"entering "<<__func__<<endl; m_current_edge++; return m_current_edge<m_lsucc.size(); + } bool SogKripkeIteratorOTF::done() const { - +cout<<"entring /excit"<<__func__<<endl; return m_current_edge==m_lsucc.size(); + } SogKripkeStateOTF* SogKripkeIteratorOTF::dst() const { + cout<<"enter/excit "<<__func__<<endl; return new SogKripkeStateOTF(m_lsucc.at(m_current_edge).first); } bdd SogKripkeIteratorOTF::cond() const { + cout<<"entering "<<__func__<<endl; if (m_lsucc.at(m_current_edge).second==-1) return bddtrue; + cout<<"step 0"<<endl; string name=m_builder->getTransition(m_lsucc.at(m_current_edge).second); //cout<<"Value "<<m_lddstate->getSuccessors()->at(m_current_edge).second<<" Transition name "<<name<<endl; - + cout<<"step 1 "<<name<<endl; spot::bdd_dict *p=m_dict_ptr->get(); + cout<<"step 2"<<endl; spot::formula f=spot::formula::ap(name); bdd result=bdd_ithvar((p->var_map.find(f))->second); //cout<<"Iterator "<<__func__<<" "<<m_current_edge<<"\n";*/ - //return result; - return result; + cout<<"exciting "<<__func__<<endl; + return result & spot::kripke_succ_iterator::cond(); } /*spot::acc_cond::mark_t SogKripkeIterator::acc() const { diff --git a/src/SogKripkeOTF.cpp b/src/SogKripkeOTF.cpp index 61b6348892270de405b3c5ef74c832e94811d9b3..7f3129edffd55d5a3ad1fee55a6d757761ef3cd7 100644 --- a/src/SogKripkeOTF.cpp +++ b/src/SogKripkeOTF.cpp @@ -18,30 +18,34 @@ SogKripkeOTF::SogKripkeOTF(const bdd_dict_ptr &dict_ptr,ModelCheckLace *builder) } SogKripkeOTF::SogKripkeOTF(const spot::bdd_dict_ptr& dict_ptr,ModelCheckLace *builder,set<string> &l_transap,set<string> &l_placeap):SogKripkeOTF(dict_ptr,builder) { + for (auto it=l_transap.begin();it!=l_transap.end();it++) { register_ap(*it); } for (auto it=l_placeap.begin();it!=l_placeap.end();it++) register_ap(*it); + } state* SogKripkeOTF::get_init_state() const { - //cout<<"Initial state given...\n"; + cout<<__func__<<endl; return new SogKripkeStateOTF(m_builder->buildInitialMetaState());//new SpotSogState(); } // Allows to print state label representing its id std::string SogKripkeOTF::format_state(const spot::state* s) const { + cout<<__func__<<endl; auto ss = static_cast<const SogKripkeStateOTF*>(s); std::ostringstream out; out << "( " << ss->getLDDState()->getLDDValue() << ")"; - cout << "( " << ss->getLDDState()->getLDDValue() << ")"; + cout << " ( " << ss->getLDDState()->getLDDValue() << ")"; return out.str(); } SogKripkeIteratorOTF* SogKripkeOTF::succ_iter(const spot::state* s) const { + cout<<__func__<<endl; auto ss = static_cast<const SogKripkeStateOTF*>(s); ////////////////////////////////////////////// @@ -69,6 +73,7 @@ bdd SogKripkeOTF::state_condition(const spot::state* s) const spot::formula f=spot::formula::ap(name); result&=!bdd_ithvar((dict_->var_map.find(f))->second); } + return result; } diff --git a/src/SpotSogIterator.cpp b/src/SpotSogIterator.cpp index 8d3ba3f18a99cbb23e9da527a92cb60893122882..62b14d346834652a355a888de088864cfbe32862 100644 --- a/src/SpotSogIterator.cpp +++ b/src/SpotSogIterator.cpp @@ -7,6 +7,7 @@ SpotSogIterator::SpotSogIterator(const LDDState* lddstate):m_lddstate(lddstate) { //vector<pair<LDDState*, int>> + m_lddstate->setDiv(true); for (int i=0;i<m_lddstate->getSuccessors()->size();i++) { m_lsucc.push_back(m_lddstate->getSuccessors()->at(i)); diff --git a/src/main.cpp b/src/main.cpp index 434f3e0e6237d9227816ae8dbdabc65d7a4cb1a2..3d07fc7d87967027d48600c61e7eb8e811a5925a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -147,10 +147,13 @@ int main(int argc, char** argv) } // Initialize SOG builder ModelCheckLace* mcl=new ModelCheckLace(R,bound,nb_th); + cout<<"Created"<<endl; spot::twa_graph_ptr k = spot::make_twa_graph(std::make_shared<SogKripkeOTF>(d,mcl,R.getListTransitionAP(),R.getListPlaceAP()), spot::twa::prop_set::all(), true); // Performing on the fly Modelchecking + cout<<"Performing on the fly Modelchecking"<<endl; + exit(0); } else if (n_tasks==1) {