Edge generateLTConstraint(CNF *cnf, uint numvars, Edge *var1, Edge *var2){
if(numvars == 0 )
- return E_True;
+ return E_False;
Edge result =constraintAND2(cnf, constraintNegate( var1[0]), var2[0]);
for (uint i = 1; i < numvars; i++) {
Edge lt = constraintAND2(cnf, constraintNegate( var1[i]), var2[i]);
result = constraintOR2(cnf, lt, eq);
}
return result;
-}
\ No newline at end of file
+}
+
+Edge generateLTEConstraint(CNF *cnf, uint numvars, Edge *var1, Edge *var2){
+ if(numvars == 0 )
+ return E_True;
+ Edge result =constraintIMPLIES(cnf, var1[0], var2[0]);
+ for (uint i = 1; i < numvars; i++) {
+ Edge lt = constraintAND2(cnf, constraintNegate( var1[i]), var2[i]);
+ Edge eq = constraintAND2(cnf, constraintIFF(cnf, var1[i], var2[i]), result);
+ result = constraintOR2(cnf, lt, eq);
+ }
+ return result;
+}
Edge generateLTValueConstraint(CNF *cnf, uint numvars, Edge *vars, uint value);
Edge generateEquivNVConstraint(CNF *cnf, uint numvars, Edge *var1, Edge *var2);
Edge generateLTConstraint(CNF *cnf, uint numvars, Edge *var1, Edge *var2);
+Edge generateLTEConstraint(CNF *cnf, uint numvars, Edge *var1, Edge *var2);
extern Edge E_True;
extern Edge E_False;