10 return is_positive_checked(expr);
15 return is_positive_checked(expr,
context);
20 InferenceEngine inference(*
this);
21 return inference.query_positive_checked(expr,
context);
25 return is_negative_checked(expr);
30 return is_negative_checked(expr,
context);
35 InferenceEngine inference(*
this);
36 return inference.query_negative_checked(expr,
context);
40 return is_nonnegative_checked(expr);
45 return is_nonnegative_checked(expr,
context);
50 InferenceEngine inference(*
this);
51 return inference.query_nonnegative_checked(expr,
context);
55 return is_real_checked(expr);
60 return is_real_checked(expr,
context);
65 InferenceEngine inference(*
this);
66 return inference.query_real_checked(expr,
context);
70 return is_integer_checked(expr);
75 return is_integer_checked(expr,
context);
80 InferenceEngine inference(*
this);
81 return inference.query_integer_checked(expr,
context);
85 return is_nonzero_checked(expr);
90 return is_nonzero_checked(expr,
context);
95 InferenceEngine inference(*
this);
96 return inference.query_nonzero_checked(expr,
context);
99 const std::string& symbol,
101 return is_continuous_checked(symbol,
interval);
105 const std::string& symbol,
107 constexpr const char*
operation =
"is_continuous";
108 if (symbol.empty()) {
112 for (
auto it = scope_stack_.rbegin(); it != scope_stack_.rend(); ++it) {
113 auto result = it->properties.is_continuous_checked(symbol,
interval);
117 if (result.value()) {
125 const std::string& symbol,
127 return is_differentiable_checked(symbol,
interval);
131 const std::string& symbol,
133 constexpr const char*
operation =
"is_differentiable";
134 if (symbol.empty()) {
138 for (
auto it = scope_stack_.rbegin(); it != scope_stack_.rend(); ++it) {
139 auto result = it->properties.is_differentiable_checked(symbol,
interval);
143 if (result.value()) {
151 const std::string& symbol)
const {
152 return is_positive_definite_checked(symbol);
156 const std::string& symbol)
const {
157 constexpr const char*
operation =
"is_positive_definite";
158 if (symbol.empty()) {
162 for (
auto it = scope_stack_.rbegin(); it != scope_stack_.rend(); ++it) {
163 Definiteness d = it->properties.get_definiteness(symbol);
173 const std::string& symbol)
const {
174 return is_positive_semidefinite_checked(symbol);
178 const std::string& symbol)
const {
179 constexpr const char*
operation =
"is_positive_semidefinite";
180 if (symbol.empty()) {
184 for (
auto it = scope_stack_.rbegin(); it != scope_stack_.rend(); ++it) {
185 Definiteness d = it->properties.get_definiteness(symbol);
AssumptionContext class with scoped push/pop management.
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(Tribool value)
InferenceEngine class for deriving properties of composite expressions.
ComputationContext const std::string & operation
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
ExprResult interval(ExprPtr lower, ExprPtr upper, bool lower_closed, bool upper_closed)
@ Unknown
Property cannot be determined
@ True
Property definitely holds
@ False
Property definitely does not hold
Result< Tribool > AssumptionTriboolResult
Definiteness
Matrix definiteness classification.
@ PositiveSemiDefinite
All eigenvalues non-negative
@ PositiveDefinite
All eigenvalues positive
@ Unknown
Definiteness not determined