/// <summary> /// Disjoins the current side constraint with constr /// </summary> /// <param name="constr"></param> /// <param name="context"></param> public void ExtendSideConstraint(int index, Z3BoolExpr constr, Z3Context context) { Z3BoolExpr crntConstr; if (SideConstraints.TryFindValue(index, out crntConstr)) { SideConstraints[index] = context.MkOr(crntConstr, constr); } else { SideConstraints.Add(index, constr); } }
/// <summary> /// Removes all constraints introduced at or after index. /// </summary> /// <param name="index"></param> public void ContractSideConstraint(int index) { var deleteList = new LinkedList <int>(); foreach (var kv in SideConstraints.GetEnumerable(index)) { deleteList.AddLast(kv.Key); } foreach (var k in deleteList) { SideConstraints.Remove(k); } }