public Z3BoolExpr MkTest(Z3Expr t, Term type) { Term intr; var unn = Owner.GetIntersection(Type, type, out intr); var it = (Z3IntExpr)UnboxingFun.Apply(t); if (intr == null) { return(Context.MkFalse()); } else if (intr == Type) { return(Context.MkTrue()); } Z3BoolExpr test = null; var iPos = MkIntCoercion(t); foreach (var r in unn.RangeMembers) { test = test.Or( Context, iPos.Ge( Context, Context.MkInt(r.Key.ToString())).And( Context, iPos.Le(Context, Context.MkInt(r.Value.ToString())))); } return(test); }
public Z3BoolExpr MkTest(Z3Expr t, Term type) { Term intr; var unn = Owner.GetIntersection(Type, type, out intr); var bt = (Z3BVExpr)UnboxingFun.Apply(t); if (intr == null) { return(Context.MkFalse()); } else if (intr == Type) { return(Context.MkTrue()); } Z3BoolExpr test = null; foreach (var i in unn.RangeMembers) { var istart = Context.MkBV((i.Key - Lower).ToString(), bvSort.Size); var iend = Context.MkBV((i.Value - Lower).ToString(), bvSort.Size); test = test.Or(Context, bt.UGe(Context, istart).And(Context, bt.ULe(Context, iend))); } return(test); }
public Z3BoolExpr MkTest(Z3Expr t, Term type) { Term intr; var unn = Owner.GetIntersection(Type, type, out intr); var bt = (Z3BVExpr)UnboxingFun.Apply(t); if (intr == null) { return(Context.MkFalse()); } else if (intr == Type) { return(Context.MkTrue()); } Z3BoolExpr test = null; foreach (var m in unn.NonRangeMembers) { if (m.Kind != SymbolKind.BaseCnstSymb && m.Kind != SymbolKind.UserCnstSymb) { continue; } test = test.Or(Context, bt.Eq(Context, Context.MkBV(symbToVal[m], bvSort.Size))); } return(test); }
public Z3BoolExpr MkTest(Z3Expr t, Term type) { Term intr; var unn = Owner.GetIntersection(Type, type, out intr); var rt = (Z3RealExpr)t; if (intr == null) { return(Context.MkFalse()); } else if (intr == Type) { return(Context.MkTrue()); } Z3BoolExpr test = null; if (unn.Contains(Index.SymbolTable.GetSortSymbol(BaseSortKind.Integer))) { test = test.Or(Context, Context.MkIsInteger(rt)); } else { if (unn.Contains(Index.SymbolTable.GetSortSymbol(BaseSortKind.Natural))) { test = test.Or(Context, Context.MkIsInteger(rt).And(Context, rt.Ge(Context, Context.MkReal(0)))); } else if (unn.Contains(Index.SymbolTable.GetSortSymbol(BaseSortKind.PosInteger))) { test = test.Or(Context, Context.MkIsInteger(rt).And(Context, rt.Ge(Context, Context.MkReal(1)))); } if (unn.Contains(Index.SymbolTable.GetSortSymbol(BaseSortKind.NegInteger))) { test = test.Or(Context, Context.MkIsInteger(rt).And(Context, rt.Lt(Context, Context.MkReal(0)))); } } Rational r; foreach (var e in unn.NonRangeMembers) { if (e.Kind != SymbolKind.BaseCnstSymb) { continue; } r = (Rational)((BaseCnstSymb)e).Raw; test = test.Or(Context, rt.Eq(Context, Context.MkReal(string.Format("{0}/{1}", r.Numerator, r.Denominator)))); } foreach (var i in unn.RangeMembers) { test = test.Or(Context, rt.Ge(Context, Context.MkReal(i.Key.ToString())). And(Context, rt.Le(Context, Context.MkReal(i.Value.ToString()))). And(Context, Context.MkIsInteger(rt))); } return(test); }
public Z3BoolExpr MkTest(Z3Expr t, Term type) { Term intr; var unn = Owner.GetIntersection(Type, type, out intr); var it = (Z3IntExpr)t; if (intr == null) { return(Context.MkFalse()); } else if (intr == Type) { return(Context.MkTrue()); } Z3BoolExpr test = null; if (unn.Contains(Index.SymbolTable.GetSortSymbol(BaseSortKind.Natural))) { test = test.Or(Context, it.Ge(Context, Context.MkInt(0))); } else if (unn.Contains(Index.SymbolTable.GetSortSymbol(BaseSortKind.PosInteger))) { test = test.Or(Context, it.Ge(Context, Context.MkInt(1))); } if (unn.Contains(Index.SymbolTable.GetSortSymbol(BaseSortKind.NegInteger))) { test = test.Or(Context, it.Lt(Context, Context.MkInt(0))); } foreach (var i in unn.RangeMembers) { test = test.Or(Context, it.Ge(Context, Context.MkInt(i.Key.ToString())). And(Context, it.Le(Context, Context.MkInt(i.Value.ToString())))); } return(test); }
public Z3BoolExpr MkTest(Z3Expr t, Term type) { Contract.Assert(t != null && t.Sort.Equals(Representation)); Term intr; var unn = Owner.GetIntersection(Type, type, out intr); if (intr == null) { return(Context.MkFalse()); } else if (intr == Type) { return(Context.MkTrue()); } Z3BoolExpr test = null; var nat = (Z3IntExpr)UnboxingFun.Apply(t); if (unn.Contains(Index.SymbolTable.GetSortSymbol(BaseSortKind.PosInteger))) { test = test.Or(Context, nat.NEq(Context, Context.MkInt(0))); } var iNat = MkIntCoercion(t); foreach (var r in unn.RangeMembers) { test = test.Or( Context, iNat.Ge( Context, Context.MkInt(r.Key.ToString())).And( Context, iNat.Le(Context, Context.MkInt(r.Value.ToString())))); } return(test); }
public Z3BoolExpr MkTest(Z3Expr t, Term type) { Term intr; var unn = Owner.GetIntersection(Type, type, out intr); var st = (Z3Expr)t; if (intr == null) { return(Context.MkFalse()); } else if (intr == Type) { return(Context.MkTrue()); } Z3BoolExpr test = null; BaseCnstSymb bc; foreach (var e in unn.NonRangeMembers) { if (e.Kind != SymbolKind.BaseCnstSymb) { continue; } bc = (BaseCnstSymb)e; if (bc.CnstKind != CnstKind.String) { continue; } test = test.Or(Context, st.Eq(Context, MkGround(e, null))); } return(test); }