The remaining pre-defined meta-predicates, not yet presented in Section
5, of * Milord II* with their meaning is presented next.

**cardinal(list,n):**- It evaluates to true if the length of
*list*is equal to*n*. The first argument must be grounded before the evaluation is performed. If the second is a free variable, this predicate instantiates it. For instance`cardinal((a,b,c),3)`evaluates to true. **atom(expression):**- It is a predicate that returns the value true if
the
*expression*evaluates to an atom.*expression*must be grounded. **member(el, list):**- Evaluates to true if the element
*el*belongs to*list*. For instance,`member(d,(a,b,c))`returns false. Both arguments must be grounded. **equal(exp1,exp2), diff(exp1,exp2):**- These operations compare two
expressions returning true if they are equal or different respectively.
Both expressions must be grounded.
**{lt, le, eq, neq, ge, gt}(exp1,exp2):**- These operations (less
than, less or equal, equal, not equal, greater or equal and greater than,
respectively) allow us to compare numbers or linguistic terms. For
instance
`le(possible,definite)`returns true if*possible*is less or equal than*definite*in the ordering established in the local logic of the module. Likewise`ge(4,5)`will evaluate to false. Again the expressions must be grounded. **intersection(list1,list2):**- Returns true if the intersection of the
two argument lists is not empty.
**set_of_instances(var1, expression, var2):**- Given an
*expression*containing the variable*var*1, the variable*var*2 will be bound to a list containing all the instances of*var*1 that make the*expression*true. The expression can contain any meta-predicate expression combined by the next reification names for the connectives:*conj*for and*neg*for .*var*1 and*var*2 must be free. For instance, given the following predicateset_of_instances($x,Conj(K(=(f,$x),int(s,s)), member($x,list(a, b, c))), $values)

the variable

*values*will contain all the elements of the set fact*f*that are true and are either a, or b or c.. **position(list, int, exp):**- This meta-predicate
is true if the value in list
*list*at position*int*is the same as the value of*exp*. If*exp*is a free variable , the result will be true and*exp*will be bound to the value of*list*at position*int*. If the value of*int*is out of the limits of*list*the predicate will return the value false.

**Figure 13:** Syntax of deductive control definition.

Thu Oct 23 15:34:13 MET DST 1997