[ library(cardinal) | Third Party Libraries | Reference Manual | Alphabetic Index ]

# refine(++UpDown, ?SetVar)

Refine a set variable's domain

UpDown
  Atom ('up' or 'down').
SetVar
  A set variable.

## Description

Pick the first element of SetVar's poss (lub\glb) and try to include it in its glb, or to definitely exclude it from the domain.

If heuristic UpDown is 'up' then inclusion is tried first; otherwise (down) exclusion is tried first.

### Fail Conditions

Fails if Var can not be refined (it is either ground or both the inclusion and exclusion of the first element of its poss leads to a failure due to unsatisfied constraints).

### Resatisfiable

Yes.

## Examples

    ?- S `:: [a]+[b,c], refine(up,S), glb_poss(S,G,P).
    G = [a,b], P = [c] ;
    G = [a], P = [c] ;
    no

    ?- S `:: [a]+[b,c], refine(down,S), glb_poss(S,G,P).
    G = [a], P = [c] ;
    G = [a,b], P = [c] ;
    no

## See Also

set_labeling / 2, set_labeling / 1