Box 2080, 67608 Kaiserslautern, Germany
Finite Domains and Exclusions
as First-Class Citizens
Languages based on logical variables can regard finite domains,
finite exclusions, and, generally, types as values.
Like a variable can be bound to a non-ground structure
which can be later specialized through in-place assignment
of some inner variables, it can also be bound to, say, a
domain structure which can be specialized later
through `in-place deletion' of some of its elements
(e.g. by intersection with other domain structures).
While finite domains prescribe the elements of a disjunctive
structure, the complementary finite exclusions
forbid the elements of a conjunctive
structure. Domains and exclusions can be values of variables or
occur inside clauses as/in terms or within an occurrence-binding
construct (useful to name arbitrary terms).
In a relational-functional language (e.g., RELFUN) they
can also be returned as values of functions. Altogether, domains
and exclusions become first-class citizens. Because
they are completely handled by an extended unification routine,
they do not require delay techniques needed in (more expressive)
constraint systems. Still, their backtracking-superseding
`closed' representation leads to smaller proof trees (efficiency),
and abstracted, intensional answers (readability).
Anti-unification (for generalization)
exchanges the roles of domains and exclusions.
The operational semantics of domains, exclusions, and
occurrence bindings is specified by a RELFUN meta-unify
function (and implemented in pure LISP).