
CS :~ ConstrSpec

   Add a constraint to a constraint set

Arguments
   CS                  Constraint set or free variable
   ConstrSpec          A constraint specification

Type
   library(tentative)

Description

	Add a constraint to a constraint set. After adding, the constraint
	will be part of the constraint set, and add to its total violatedness.
	The amount of violatedness contributed by the constraint depends on
	the constraint's implementation, but can be scaled.
	
	Three forms of constraint specification are recognised here:
	
	Constraint
	    A constraint goal. The constraint must have a 'tentative
	    implementation', i.e. a predicate must be defined that takes one
	    additional argument and implements the violation monitoring for
	    the constraint (see constraint implementation interface).
	Weight * Constraint
	    where Weight is an integer. This means that the constraints
	    violatedness is scaled with the factor Weight before being added
	    to the total violatedness of the constraint set.
	Constraint alias Term
	    Term is the term that can be retrieved from the constraint
	    set, in place of the constraint goal itself (see cs_all/2 etc).
	Weight * Constraint alias Term
	    Conbination of both modifiers above.
	
	
	If CS is a free variable, a new constraint set will be implicitly
	created (as if created with cs_create(CS, [])).
	
    

Modes and Determinism
   :~(?, +) is det

Examples
   
    ?- length(Xs, 5), tent_set_all(Xs, 99), CS :~ alldifferent(Xs).
    Xs = [Xi{99 -> 4}, Xi{99 -> 4}, Xi{99 -> 4}, Xi{99 -> 4}, Xi{99 -> 4}]
    CS = constraint_set(TotalVio{10 -> 0}, ...)
    There is 1 delayed goal.
    Yes (0.00s cpu)
    

See Also
   cs_create / 2, cs_clear_all / 1, cs_clear_satisfied / 1, cs_violations / 2, cs_current_violations / 2, cs_random_worst / 2, cs_all_worst / 2, cs_all_violated / 2, cs_random_violated / 2, cs_all / 2, tent_implements / 2
