Motivation
1. Reduce the programming burden.
2. System should simply accept the necessary information and the objective (goal), and then figure out its own solution.
3. Have a program that looks more like its own specification.
4. Take advantage of logical inference to automatically get many of the consequences of the given information.