public Constraint AddBoolXor(IEnumerable <ILiteral> literals) { Constraint ct = new Constraint(model_); BoolArgumentProto bool_argument = new BoolArgumentProto(); foreach (ILiteral lit in literals) { bool_argument.Literals.Add(lit.GetIndex()); } ct.Proto.BoolXor = bool_argument; return(ct); }
/** * <summary> * Adds <c>a ⇒ b</c>. * </summary> */ public Constraint AddImplication(ILiteral a, ILiteral b) { BoolArgumentProto or = new BoolArgumentProto(); or.Literals.Capacity = 2; or.Literals.Add(a.Not().GetIndex()); or.Literals.Add(b.GetIndex()); Constraint ct = new Constraint(model_); ct.Proto.BoolOr = or; return(ct); }
/** * <summary> * Adds <c>And(literals) == true</c>. * </summary> */ public Constraint AddBoolAnd(IEnumerable <ILiteral> literals) { BoolArgumentProto bool_argument = new BoolArgumentProto(); bool_argument.Literals.TrySetCapacity(literals); foreach (ILiteral lit in literals) { bool_argument.Literals.Add(lit.GetIndex()); } Constraint ct = new Constraint(model_); ct.Proto.BoolAnd = bool_argument; return(ct); }