1#define _USE_MATH_DEFINES
8 return query_positive_checked(expr,
context);
20 if (guard.should_abort()) {
25 return Impl::number_positive(*
num);
29 const auto& props = impl_->ctx;
44 return impl_->composite_positive(*
this, expr,
context);
50 return query_negative_checked(expr,
context);
62 if (guard.should_abort()) {
67 return Impl::number_negative(*
num);
72 const auto& props = impl_->ctx;
84 return impl_->composite_negative(*
this, expr,
context);
90 return query_nonnegative_checked(expr,
context);
102 if (guard.should_abort()) {
107 return Impl::number_nonnegative(*
num);
112 const auto& props = impl_->ctx;
122 return impl_->composite_nonnegative(*
this, expr,
context);
128 return query_nonpositive_checked(expr,
context);
135 if (guard.should_abort()) {
140 return Impl::number_nonpositive(*
num);
145 const auto& props = impl_->ctx;
155 return impl_->composite_nonpositive(*
this, expr,
context);
161 return query_nonzero_checked(expr,
context);
171 if (guard.should_abort()) {
176 return Impl::number_nonzero(*
num);
181 const auto& props = impl_->ctx;
185 if (props.has_sign(var->name(),
Sign::Zero)) {
191 return impl_->composite_nonzero(*
this, expr,
context);
static Result success(Tribool value)
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
std::shared_ptr< SymbolicExpr > num(int value)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
Result< T > checked_inference_result(const SymbolicExpr &expr, const std::string &operation, ComputationContext &context, const std::function< Result< T >()> &query)
@ PositiveInt
Positive integers (1, 2, 3, ...)
@ Unknown
Property cannot be determined
@ True
Property definitely holds
@ False
Property definitely does not hold
Result< Tribool > InferenceTriboolResult
int infinity_sign(const SymbolicExpr &expression, ComputationContext &context)