[ library(ic_symbolic) | Reference Manual | Alphabetic Index ]

# msg(?X, ?Y, -MSG)

MSG is the most specific generalisation of X and Y representable with ic-symbolic domain variables
X
Any term or variable
Y
Any term or variable
MSG
A domain variable or constant (output)

## Description

This predicate computes the most specific generalisation of X and Y which can be represented using ic-symbolic's domains and domain variables.

If X and Y are domain variables (or constants) from the same domain, then MSG will be unified with a new domain variable whose domain consists of the union of the domain elements of X and Y.

If X and Y are domain variables or constants with incompatible domains, then the result will be a free (unconstrained) variable.

If X or Y are free (unconstrained) variables, then the result will also be a free (unconstrained) variable.

### Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

None

## Examples

```    ?- local domain(weekday(mo, tu, we, th, fr, sa, su)).
Yes (0.00s cpu)

?- msg(we, fr, Z).
Z = Z{[we, fr]}
Yes (0.00s cpu)

?- X &:: [sa, su], msg(X, we, Z).
X = X{[sa, su]}
Z = Z{[we, sa, su]}
Yes (0.00s cpu)

?- X &:: [sa, su], Y &:: [mo, tu, we], msg(X, Y, Z).
X = X{[sa, su]}
Y = Y{[mo, tu, we]}
Z = Z{[mo, tu, we, sa, su]}
Yes (0.00s cpu)

?- X &:: [sa, su], msg(X, _, Z).
X = X{[sa, su]}
Z = Z
Yes (0.01s cpu)

% in the following, the result is not precisely representable
?- X &:: [sa, su], msg(X, foo, Z).
X = X{[sa, su]}
Z = Z
Yes (0.01s cpu)
```