24 #ifndef _OPENCOG_PATTERN_MATCH_ENGINE_H
25 #define _OPENCOG_PATTERN_MATCH_ENGINE_H
30 #include <unordered_map>
97 typedef std::pair<PatternTermPtr, Handle>
Choice;
112 typedef std::pair<PatternTermPtr, Handle>
Unorder;
125 std::map<Unorder, int> perm_count;
126 std::stack<std::map<Unorder, int>> perm_count_stack;
228 const std::map<Handle, Handle> &clauses);
230 static void print_term(
const std::set<Handle> &vars,
231 const std::vector<Handle> &clauses);
236 #endif // _OPENCOG_PATTERN_MATCH_ENGINE_H
bool explore_neighborhood(const Handle &, const Handle &, const Handle &)
PatternTermSeq Permutation
std::stack< SolnMap > var_solutn_stack
PatternMatchEngine(PatternMatchCallback &, const Variables &, const Pattern &)
std::shared_ptr< PatternTerm > PatternTermPtr
unsigned int _clause_stack_depth
std::set< Handle > evaluatable_holders
static void print_solution(const std::map< Handle, Handle > &vars, const std::map< Handle, Handle > &clauses)
std::stack< const Pattern * > _stack_pattern
bool do_term_up(const PatternTermPtr &, const Handle &, const Handle &)
std::map< Handle, Handle > var_grounding
ClassServer & _classserver
std::map< Handle, Handle > clause_grounding
bool have_choice(const PatternTermPtr &, const Handle &)
std::shared_ptr< Link > LinkPtr
std::pair< PatternTermPtr, Handle > Choice
std::vector< PatternTermPtr > PatternTermSeq
const Variables * _varlist
bool get_next_thinnest_clause(bool, bool, bool)
void clause_stacks_clear(void)
bool self_compare(const Handle &)
void clause_stacks_push(void)
bool explore_link_branches(const PatternTermPtr &, const Handle &, const Handle &)
std::stack< SolnMap > term_solutn_stack
bool explore_choice_branches(const PatternTermPtr &, const Handle &, const Handle &)
bool quote_compare(const PatternTermPtr &, const Handle &)
std::map< Choice, size_t > ChoiceState
unsigned int thickness(const Handle &, const std::set< Handle > &)
bool is_black(const Handle &h)
std::pair< PatternTermPtr, Handle > Unorder
void clear_current_state(void)
PatternMatchCallback & _pmc
bool explore_single_branch(const PatternTermPtr &, const Handle &, const Handle &)
bool variable_compare(const Handle &, const Handle &)
bool explore_redex(const Handle &, const Handle &, const Handle &)
std::stack< const Variables * > _stack_variables
ChoiceState _choice_state
std::stack< IssuedSet > issued_stack
bool unorder_compare(const PatternTermPtr &, const Handle &, const LinkPtr &, const LinkPtr &)
bool is_optional(const Handle &h)
std::set< Handle > IssuedSet
std::stack< ChoiceState > choice_stack
bool do_next_clause(void)
bool redex_compare(const LinkPtr &, const LinkPtr &)
static void print_term(const std::set< Handle > &vars, const std::vector< Handle > &clauses)
std::set< Handle > optionals
std::map< Handle, Handle > SolnMap
bool explore_clause(const Handle &, const Handle &, const Handle &)
std::map< Unorder, Permutation > PermState
bool ordered_compare(const PatternTermPtr &, const Handle &, const LinkPtr &, const LinkPtr &)
size_t curr_choice(const PatternTermPtr &, const Handle &, bool &)
bool explore_term_branches(const Handle &, const Handle &, const Handle &)
bool clause_accept(const Handle &, const Handle &)
Permutation curr_perm(const PatternTermPtr &, const Handle &, bool &)
bool explore_up_branches(const PatternTermPtr &, const Handle &, const Handle &)
bool is_evaluatable(const Handle &h)
void get_next_untried_clause(void)
void clause_stacks_pop(void)
bool tree_compare(const PatternTermPtr &, const Handle &, Caller)
bool choice_compare(const PatternTermPtr &, const Handle &, const LinkPtr &, const LinkPtr &)
bool have_perm(const PatternTermPtr &, const Handle &)
bool node_compare(const Handle &, const Handle &)
Compare two nodes, one in the pattern, one proposed grounding.
std::stack< PermState > perm_stack