We shall start this section on some considerations on the role of preferences in a representation language. The casual reader can safely skip this introduction.
There are a lot of kinds of programs, but a useful characterization is a continuum between two extreme kinds of programs: transformational vs. decision-taking programs. Transformational programs embody a complex manipulation of input information into an output information--examples are compilers, visualizers, and text processors. Decision-taking programs embody a complex assessment of information that results in performing some specific outputs or actions--examples are AI programs and simulation programs. They are characterized by complex ``control'' architectures and by the fact that their core aspect is all the specific decisions taken during processing and not merely the output.
Essentially, some options are better than others, and decisions have to be taken even if we have no complete knowledge about when and how much something is better than another thing. Preferences in Noos are a mechanism for a declarative specification of decision-taking (or ``control'') on the grounds of incomplete information. They are modeled by partial orders, and only under the presence of complete information we arrive at total orders. Preferences plus backtracking can be seen as specifying ``partial programs'', i.e. indeterministic programs that search following the directions provided by preferences.
The three main usages of preferences in Noos are