+ return (inf ==info_flags::posint? pos : !pos);
+ }
+ case info_flags::nonnegint: {
+ bool pos = true;
+ epvector::const_iterator i = seq.begin(), end = seq.end();
+ while (i != end) {
+ const ex& factor = recombine_pair_to_ex(*i++);
+ if (factor.info(info_flags::nonnegint) || factor.info(info_flags::posint))
+ continue;
+ else if (factor.info(info_flags::negint))
+ pos = !pos;
+ else
+ return false;
+ }
+ if (overall_coeff.info(info_flags::negint))
+ pos = !pos;
+ else if (!overall_coeff.info(info_flags::posint))
+ return false;
+ return pos;
+ }
+ case info_flags::indefinite: {
+ if (flags & status_flags::purely_indefinite)
+ return true;
+ if (flags & (status_flags::is_positive | status_flags::is_negative))
+ return false;
+ epvector::const_iterator i = seq.begin(), end = seq.end();
+ while (i != end) {
+ const ex& term = recombine_pair_to_ex(*i);
+ if (term.info(info_flags::positive) || term.info(info_flags::negative))
+ return false;
+ ++i;
+ }
+ setflag(status_flags::purely_indefinite);
+ return true;