Overview of Formal Specifications
Generally speaking, a specification describes the task at hand formally. A specification is a definition of the interface and data in a format the computer can understand. The fact that this description is formal means that it is officially agreed upon and consistent with other decisions made during the development.
The specification provides the bridge between an English description and the AI implementation. This phase is a final chance to think before the implementation starts, which will offer great assistance later.
Procedural View of AI
Taking a functional point of view can help explain the situation. Consider the AI as a single procedure, which needs to be passed information and return the results. In C++, the declaration of a function is known as a prototype (or footprint). After the prototype has been written, both the inputs and outputs have been formally specified—using C++ keywords to define the data structures.
Before we can implement a function, it's necessary to know about the relationship with external variables. Explaining the implicit behavior of the program outside the procedure is necessary to solve the problem. When we have the prototype, and the description of the context, programming the function is greatly simplified. This is exactly what we want to achieve for the AI solution: Make the implementation easier by formalizing the variables involved.
Aim of the Specification
At the end of the specification stage, the interface defines how the problem fits into the rest of the system. We call this the scaffolding. In a nutshell, there are three things to worry about formalizing: the context, the inputs, and outputs—as mentioned in Chapter 7, "Analysis and Understanding."
There are many design methodologies to handle this sort of programming conundrum, and developing AI can be similar in many ways. That said, there are numerous AI specific tips and tricks that we can use to customize this process to be more appropriate. The methodical routines described here—as well as knowledge representation theory—simplify the handling of complex problems.