void ComputationManager::initializeDepqbf() { depqbf = qdpll_create(); std::string depMan = "--dep-man=qdag"; std::vector<char> depManC(depMan.begin(), depMan.end()); depManC.push_back('\0'); qdpll_configure(depqbf, &depManC[0]); for (unsigned int level = 1; level <= app.getInputInstance()->getQuantifierSequence().size(); level++) { NTYPE quantifier = app.getInputInstance()->quantifier(level); switch (quantifier) { case NTYPE::EXISTS: qdpll_new_scope(depqbf, QDPLL_QTYPE_EXISTS); break; case NTYPE::FORALL: qdpll_new_scope(depqbf, QDPLL_QTYPE_FORALL); break; default: ; //error } for (htd::vertex_t vertex : app.getInputInstance()->hypergraph->internalGraph().vertices()) { unsigned int vertexLevel = htd::accessLabel<int>(app.getInputInstance()->hypergraph->internalGraph().vertexLabel("level", vertex)); if (level == vertexLevel) { qdpll_add(depqbf, vertex); } } qdpll_add(depqbf, 0); // end scope } for (htd::Hyperedge edge : app.getInputInstance()->hypergraph->internalGraph().hyperedges()) { htd::id_t edgeId = edge.id(); const std::vector<bool> &edgeSigns = htd::accessLabel < std::vector<bool>>(app.getInputInstance()->hypergraph->edgeLabel("signs", edgeId)); std::vector<bool>::const_iterator index = edgeSigns.begin(); for (const auto& vertex : edge) { if (*index) { qdpll_add(depqbf, vertex); } else { qdpll_add(depqbf, -vertex); } index++; } qdpll_add(depqbf, 0); // end clause } qdpll_init_deps(depqbf); }
JNIEXPORT void JNICALL Java_depqbf4j_DepQBF4J_initDeps (JNIEnv * env, jclass cls) { qdpll_init_deps(solver); }
int qdpll_main (int argc, char **argv) { QDPLLResult result = QDPLL_RESULT_UNKNOWN; QDPLLApp app; memset (&app, 0, sizeof (QDPLLApp)); set_default_options (&app); qdpll = qdpll_create (); parse_cmd_line_options (&app, qdpll, argc, argv); check_options (&app); set_signal_handlers (&app); if (app.options.print_usage) { print_usage (); cleanup (qdpll, &app); return result; } if (app.options.print_version) { print_version (); cleanup (qdpll, &app); return result; } if (app.options.max_time) alarm (app.options.max_time); parse (&app, qdpll, app.options.in, app.options.trace); if (app.options.pretty_print) { /* Call 'qdpll_gc' to clean up the formula by removing variables which have no occurrences and removing empty quantifier blocks. */ qdpll_gc (qdpll); qdpll_print (qdpll, stdout); } else if (app.options.deps_only) { qdpll_init_deps (qdpll); if (app.options.print_deps) print_deps (&app, qdpll); if (app.options.dump_dep_graph) qdpll_dump_dep_graph (qdpll); } else { result = qdpll_sat (qdpll); #if (COMPUTE_STATS || COMPUTE_TIMES) qdpll_print_stats (qdpll); #endif } if (app.options.trace == TRACE_QRP) fprintf (stdout, "r "); else if (app.options.trace == TRACE_BQRP) fprintf (stdout, "%cr ", 0); print_result_message (&app, qdpll, result, stdout); cleanup (qdpll, &app); return result; }