27 using namespace opencog;
52 std::vector<Handle> &clauses)
54 bool modified =
false;
57 std::vector<Handle>::iterator i;
58 for (i = clauses.begin(); i != clauses.end(); )
111 std::vector<HandleSeq>& components,
112 std::vector<std::set<Handle>>& component_vars)
114 std::vector<Handle> todo(clauses);
116 while (0 < todo.size())
120 std::vector<Handle> no_con_yet;
121 bool did_at_least_one =
false;
123 for (
const Handle& cl: todo)
125 bool extended =
false;
128 size_t nc = components.size();
129 for (
size_t i = 0; i<nc; i++)
131 std::set<Handle>& cur_vars(component_vars[i]);
137 components[i].push_back(cl);
145 did_at_least_one =
true;
151 no_con_yet.push_back(cl);
154 if (did_at_least_one)
162 Handle ncl(no_con_yet.back());
163 no_con_yet.pop_back();
168 components.push_back({ncl});
172 component_vars.push_back(fv.
varset);
188 std::set<Handle> varset;
190 std::function<void (const Handle&)> find_rec = [&](
const Handle& h)
192 Type t = h->getType();
193 if (t == VARIABLE_NODE)
205 for (
const Handle& oh : l->getOutgoingSet())
214 return HandleSeq(varset.begin(), varset.end());
static bool contains_atomtype(const Handle &clause, Type atom_type)
std::set< Handle > varset
std::vector< Handle > HandleSeq
a list of handles
static bool any_unquoted_in_tree(const Handle &tree, const std::set< Handle > &atoms)
std::shared_ptr< Link > LinkPtr
ClassServer & classserver(ClassServerFactory *=ClassServer::createInstance)
bool remove_constants(const std::set< Handle > &vars, std::vector< Handle > &clauses)
HandleSeq get_free_vars_in_tree(const Handle &tree)
void get_connected_components(const std::set< Handle > &vars, const HandleSeq &clauses, std::vector< HandleSeq > &components, std::vector< std::set< Handle >> &component_vars)
static LinkPtr LinkCast(const Handle &h)
unsigned short Type
type of Atoms, represented as short integer (16 bits)
void search_set(const Handle &h)