+Edge SATEncoder::generatePartialOrderConstraintsSATEncoder(Edge ij,Edge ji, Edge jk, Edge kj,Edge ik, Edge ki) {
+ Edge uoIJ = constraintAND2(cnf, constraintNegate(ij), constraintNegate(ji));
+ Edge uoJK = constraintAND2(cnf, constraintNegate(jk), constraintNegate(kj));
+ Edge uoIK = constraintAND2(cnf, constraintNegate(ik), constraintNegate(ki));
+
+ Edge t1[] = {ij, jk, ik};
+ Edge t2[] = {ji, jk, ik};
+ Edge t3[] = {ij, kj, ki};
+ Edge t4[] = {ij, kj, ik};
+ Edge t5[] = {ji, jk, ki};
+ Edge t6[] = {ji, kj, ki};
+ Edge ct1 = constraintAND(cnf, 3, t1);
+ Edge ct2 = constraintAND(cnf, 3, t2);
+ Edge ct3 = constraintAND(cnf, 3, t3);
+ Edge ct4 = constraintAND(cnf, 3, t4);
+ Edge ct5 = constraintAND(cnf, 3, t5);
+ Edge ct6 = constraintAND(cnf, 3, t6);
+
+ Edge p1[] = {uoIJ, jk, ik};
+ Edge p2[] = {ij, kj, uoIK};
+ Edge p3[] = {ji, uoJK, ki};
+ Edge p4[] = {uoIJ, kj, ki};
+ Edge p5[] = {ji, jk, uoIK};
+ Edge p6[] = {ij, uoJK, ik};
+ Edge cp1 = constraintAND(cnf, 3, p1);
+ Edge cp2 = constraintAND(cnf, 3, p2);
+ Edge cp3 = constraintAND(cnf, 3, p3);
+ Edge cp4 = constraintAND(cnf, 3, p4);
+ Edge cp5 = constraintAND(cnf, 3, p5);
+ Edge cp6 = constraintAND(cnf, 3, p6);
+
+ Edge o1[] = {uoIJ, uoJK, ik};
+ Edge o2[] = {ij, uoJK, uoIK};
+ Edge o3[] = {uoIK, jk, uoIK};
+ Edge o4[] = {ji, uoJK, uoIK};
+ Edge o5[] = {uoIJ, uoJK, ki};
+ Edge o6[] = {uoIJ, kj, uoIK};
+ Edge co1 = constraintAND(cnf, 3, o1);
+ Edge co2 = constraintAND(cnf, 3, o2);
+ Edge co3 = constraintAND(cnf, 3, o3);
+ Edge co4 = constraintAND(cnf, 3, o4);
+ Edge co5 = constraintAND(cnf, 3, o5);
+ Edge co6 = constraintAND(cnf, 3, o6);
+
+ Edge unorder [] = {uoIJ, uoJK, uoIK};
+ Edge cunorder = constraintAND(cnf, 3, unorder);
+
+
+ Edge res[] = {ct1,ct2,ct3,ct4,ct5,ct6,
+ cp1,cp2,cp3,cp4,cp5,cp6,
+ co1,co2,co3,co4,co5,co6,
+ cunorder};
+ return constraintOR(cnf, 19, res);