The logical foundations of * Milord II* have been the main topic of several
papers, for instance [14, 18, 3, 2, 12]. It is based on
a family of many-valued logics. Each logic is determined by a particular
algebra of truth-values. Any of such truth-values algebra is completely
determined as soon as the set of truth-values and the conjunction operator
are fixed. In

**Figure 9:** Syntax of local logic definition.

`lingtermdef` is the declaration of an ordered set of *n* linguistic
terms , where
stands for *false* and for *true*. For instance,

Truth values = (false, unlikely, may_be, likely, true)

`conjunction` is the declaration of the truth table of a conjunctive
connective over the previously defined term set. A possible such
operator,
representing the *min* conjunction, could be,

Conjunction = truth table ((false false false false false) (false unlikely unlikely unlikely unlikely) (false unlikely may_be may_be may_be) (false unlikely may_be likely likely) (false unlikely may_be likely true))

Different modules can have different local logics. We allow this because a very important part of any problem solving method is the way the programmer will deal with the uncertainty of the problem. And this may be particular to each subproblem: a richer set of linguistic terms can help in giving more precise answers to queries; different connectives represent different rule interpretations, and hence different deductive behaviours; even changing just the name of the terms from a module to another can make the knowledge represented in them more readable.

The main problem that has to be addressed in a system with local logics is
how modules communicate and with are the properties that are to be held in
that communication. That is, how a module has to interpret the answer to a
query made to a submodule with a different logic. The topic is of great
importance for the uncertainty research community [1]. The
practical aspect of it is that any language providing such local logic
facilities has to permit a way of defining the relation between the values
of different logics. In the case of * Milord II* we do so by the declaration,
in the local logic of a module, of a renaming function that maps the
linguistic terms of the local logics of submodules into intervals of the
linguistic terms of the module.

For instance, the translation of the terms of a module *B*, =
{impossible, few_possible, slightly_possible, possible,
quite_possible, very_possible, definite} to a module containing a local
logic with terms = {false, unlikely, may_be, likely, true} could
be expressed as the following sentence,

Renaming B/false ==> impossible B/unlikely ==> [impossible, few_possible] B/may_be ==> [few_possible, very_possible] B/likey ==> [very_possible, definite] B/true ==> definite

* Milord II* checks whether the proposed translation between modules satisfies
the requirements expressed in [2, 1]. If the local logics are
the same the identity renaming function is assumed by default and no
renaming declaration is necessary.

Thu Oct 23 15:34:13 MET DST 1997