/// <summary> /// Returns true if the union accepts all constants in the range [end1, end2] /// </summary> internal bool AcceptsConstants(BigInteger end1, BigInteger end2) { if (!ContainsConstants) { return(false); } BigInteger lower, upper; if (end1 <= end2) { lower = end1; upper = end2; } else { lower = end2; upper = end1; } if (elements.Contains(table.GetSortSymbol(BaseSortKind.Real)) || elements.Contains(table.GetSortSymbol(BaseSortKind.Integer))) { return(true); } if (elements.Contains(table.GetSortSymbol(BaseSortKind.NegInteger))) { if (lower.Sign < 0 && upper.Sign < 0) { return(true); } else if (lower.Sign < 0) { lower = BigInteger.Zero; } } if (elements.Contains(table.GetSortSymbol(BaseSortKind.Natural))) { if (lower.Sign >= 0 && upper.Sign >= 0) { return(true); } else if (upper.Sign >= 0) { upper = BigInteger.MinusOne; } } else if (elements.Contains(table.GetSortSymbol(BaseSortKind.PosInteger))) { if (lower.Sign > 0 && upper.Sign > 0) { return(true); } else if (upper.Sign > 0) { upper = BigInteger.Zero; } } return(intervals.Contains(lower, upper)); }