Reasoning about knowledge, belief or goals requires extensions of the domain of objects reasoned about. For example, a program that does backward chaining on goals used them directly as sentences, e.g. on(Block1,Block2), i.e. the symbol on is used as a predicate constant of the language. However, a program that wants to say directly that on(Block1,Block2) should be postponed until on(Block2,Block3) has been achieved, needs a sentence like precedes(on(Block2,Block3),on(Block1,Block2)), and if this is to be a sentence of first-order logic, then the symbol on must be taken as a function symbol, and on(Block1,Block2) regarded as an object in the first order language.
This process of making objects out of sentences and other entities is called reification. It is necessary for expressive power but again leads to complications in reasoning. It is discussed in (McCarthy 1979).