I located a problem with extracting constants from the goal. Usually, a goal will contain a constant. For instance, on(a,b) contains *a* and *b* as constants, so they will need to be used in the rule creation process. However, a problem arises when the constants are numbers.

Because numbers are so common in the Pacman domain, having constant numbers in the goal will result in extra additions to the possible predicate values. For example, the termination condition/goal in (finite) Pacman is to make numDots(0) and level(10). Of course, there is a maximisation in between of the score, but in order to simply finish the domain the agent needs to reach this. However, we have 2 constants present, in Integer form that would be added to any predicates that use Integers (all the distanceFrom ones).

If I am to pursue the action understanding path, I will need to watch these goal values, and because they are numbers, I can observe whether they increase or decrease (with spikes in numDots() whenever a new level is started, but they can probably be written off). So the problem lies in how will I stop these constants from being used in the distanceFrom predicates?

Perhaps one solution is to only add constants to predicates that have FREE or TIED terms as arguments. This would result in not allowing Integers and such in unless the Integer argument can be variable. Hmm, that should work. Typically Integers and such are constricted to discrete values, and if they were to be freed, then using the goal values in there is fair game.