This is a design document for a machine learning program to identify simple rules for planning, based on previously made plans. Most predicates relate to description of the world.
Bindings produced are the bindings given plus a binding of the two elements.
To distinguish variables and constants, I'll have a small boolean function IsVariable to return true if the argument is a variable. A complete state description describes it completely. This is implemented as an STL vector of predicates. E.g, here's a rule that says if the hand has something in it, we should put that object on the table. Note that rules may contain variables, but need not.