In this chapter we will define a basic language based on first order logic, but which will not have the full capabilities of Prolog: it will be pure, in the sense that no side effects of meta-programming facilities are available, and it will not have data structures. But we will add to it some symbols (like predefined numbers and operators for common arithmetical operations) which are needed to write constraints.