implies
implies |
Purpose
This composite constraint states an implication between two constraints C1 and C2 (
C1 ⇒ C2), which are not individually posted. The satisfaction of the resulting constraint is given by the following truth table:
C1 C2 C1 implies C2 -------------------------- false false true false true true true false false true true true
Synopsis
function implies(C1:cpctr, C2:cpctr) : cpctr
Arguments
C1
|
the left member constraint of the implication
|
C2
|
the right member constraint of the implication
|
Return value
An implication constraint over C1 and C2
Example
The following example shows how to use the implication constraint
model "Logical constraints" uses "kalis" ! Default bounds for all variables setparam("KALIS_DEFAULT_LB", 0); setparam("KALIS_DEFAULT_UB", 5) declarations A, B, C, D, E: cpctr x,y,z,b: cpvar end-declarations setname(b, "b"); setname(x, "x") setname(y, "y"); setname(z, "z") b <= 1 ! Definition of constraints (without posting) A:= x >= y + 5 + z + b B:= b = 1 C:= all_different({x, y, z}) ! Cannot be used with 'equiv' D:= y <= z E:= distance(y,z) <= 2 writeln("Original domains: ", b, " ", x, " ", y, " ", z) ! If x, y and z are all different then b equals 1 (C=>B), ! if b equals 1 then x, y and z are all different (B=>C). implies(C, B) implies(B, C) ! E<=>B: b equals 1 if and only if |y-z| <= 2 equiv(E, B) ! A<=>D: x >= y + 5 + z + b if and only if y <= z equiv(A, D) writeln("With constraints: ", b, " ", x, " ", y, " ", z) while (cp_find_next_sol) writeln("Solution: ", b, " ", x, " ", y, " ", z) end-model
Related topics