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. Since rule and example are so similar, we link them by inheritance.
Example is a subclass of rule.
The input to the program is a list of examples from standard input. The output is a list of rules, sent to standard output. Each example is thus covered by a rule or rules. There should be as few rules as possible to achieve the previous 2 conditions. Given the previous conditions, each rule should have as few predicates in its antecedent as possible.