LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
assumption_queries.cpp
浏览该文件的文档.
5
6namespace LMCAS {
7
8
9AssumptionTriboolResult AssumptionContext::is_positive(const SymbolicExpr& expr) const {
10 return is_positive_checked(expr);
11}
12
13AssumptionTriboolResult AssumptionContext::is_positive_checked(const SymbolicExpr& expr) const {
15 return is_positive_checked(expr, context);
16}
17
18AssumptionTriboolResult AssumptionContext::is_positive_checked(
19 const SymbolicExpr& expr, ComputationContext& context) const {
20 InferenceEngine inference(*this);
21 return inference.query_positive_checked(expr, context);
22}
23
24AssumptionTriboolResult AssumptionContext::is_negative(const SymbolicExpr& expr) const {
25 return is_negative_checked(expr);
26}
27
28AssumptionTriboolResult AssumptionContext::is_negative_checked(const SymbolicExpr& expr) const {
30 return is_negative_checked(expr, context);
31}
32
33AssumptionTriboolResult AssumptionContext::is_negative_checked(
34 const SymbolicExpr& expr, ComputationContext& context) const {
35 InferenceEngine inference(*this);
36 return inference.query_negative_checked(expr, context);
37}
38
39AssumptionTriboolResult AssumptionContext::is_nonnegative(const SymbolicExpr& expr) const {
40 return is_nonnegative_checked(expr);
41}
42
43AssumptionTriboolResult AssumptionContext::is_nonnegative_checked(const SymbolicExpr& expr) const {
45 return is_nonnegative_checked(expr, context);
46}
47
48AssumptionTriboolResult AssumptionContext::is_nonnegative_checked(
49 const SymbolicExpr& expr, ComputationContext& context) const {
50 InferenceEngine inference(*this);
51 return inference.query_nonnegative_checked(expr, context);
52}
53
54AssumptionTriboolResult AssumptionContext::is_real(const SymbolicExpr& expr) const {
55 return is_real_checked(expr);
56}
57
58AssumptionTriboolResult AssumptionContext::is_real_checked(const SymbolicExpr& expr) const {
60 return is_real_checked(expr, context);
61}
62
63AssumptionTriboolResult AssumptionContext::is_real_checked(
64 const SymbolicExpr& expr, ComputationContext& context) const {
65 InferenceEngine inference(*this);
66 return inference.query_real_checked(expr, context);
67}
68
69AssumptionTriboolResult AssumptionContext::is_integer(const SymbolicExpr& expr) const {
70 return is_integer_checked(expr);
71}
72
73AssumptionTriboolResult AssumptionContext::is_integer_checked(const SymbolicExpr& expr) const {
75 return is_integer_checked(expr, context);
76}
77
78AssumptionTriboolResult AssumptionContext::is_integer_checked(
79 const SymbolicExpr& expr, ComputationContext& context) const {
80 InferenceEngine inference(*this);
81 return inference.query_integer_checked(expr, context);
82}
83
84AssumptionTriboolResult AssumptionContext::is_nonzero(const SymbolicExpr& expr) const {
85 return is_nonzero_checked(expr);
86}
87
88AssumptionTriboolResult AssumptionContext::is_nonzero_checked(const SymbolicExpr& expr) const {
90 return is_nonzero_checked(expr, context);
91}
92
93AssumptionTriboolResult AssumptionContext::is_nonzero_checked(
94 const SymbolicExpr& expr, ComputationContext& context) const {
95 InferenceEngine inference(*this);
96 return inference.query_nonzero_checked(expr, context);
97}
98AssumptionTriboolResult AssumptionContext::is_continuous(
99 const std::string& symbol,
100 const Interval& interval) const {
101 return is_continuous_checked(symbol, interval);
102}
103
104AssumptionTriboolResult AssumptionContext::is_continuous_checked(
105 const std::string& symbol,
106 const Interval& interval) const {
107 constexpr const char* operation = "is_continuous";
108 if (symbol.empty()) {
110 CasErrc::InvalidArgument, "symbol name must not be empty", operation);
111 }
112 for (auto it = scope_stack_.rbegin(); it != scope_stack_.rend(); ++it) {
113 auto result = it->properties.is_continuous_checked(symbol, interval);
114 if (!result) {
115 return AssumptionTriboolResult::failure(result.error());
116 }
117 if (result.value()) {
119 }
120 }
122}
123
124AssumptionTriboolResult AssumptionContext::is_differentiable(
125 const std::string& symbol,
126 const Interval& interval) const {
127 return is_differentiable_checked(symbol, interval);
128}
129
130AssumptionTriboolResult AssumptionContext::is_differentiable_checked(
131 const std::string& symbol,
132 const Interval& interval) const {
133 constexpr const char* operation = "is_differentiable";
134 if (symbol.empty()) {
136 CasErrc::InvalidArgument, "symbol name must not be empty", operation);
137 }
138 for (auto it = scope_stack_.rbegin(); it != scope_stack_.rend(); ++it) {
139 auto result = it->properties.is_differentiable_checked(symbol, interval);
140 if (!result) {
141 return AssumptionTriboolResult::failure(result.error());
142 }
143 if (result.value()) {
145 }
146 }
148}
149
150AssumptionTriboolResult AssumptionContext::is_positive_definite(
151 const std::string& symbol) const {
152 return is_positive_definite_checked(symbol);
153}
154
155AssumptionTriboolResult AssumptionContext::is_positive_definite_checked(
156 const std::string& symbol) const {
157 constexpr const char* operation = "is_positive_definite";
158 if (symbol.empty()) {
160 CasErrc::InvalidArgument, "symbol name must not be empty", operation);
161 }
162 for (auto it = scope_stack_.rbegin(); it != scope_stack_.rend(); ++it) {
163 Definiteness d = it->properties.get_definiteness(symbol);
164 if (d != Definiteness::Unknown) {
167 }
168 }
170}
171
172AssumptionTriboolResult AssumptionContext::is_positive_semidefinite(
173 const std::string& symbol) const {
174 return is_positive_semidefinite_checked(symbol);
175}
176
177AssumptionTriboolResult AssumptionContext::is_positive_semidefinite_checked(
178 const std::string& symbol) const {
179 constexpr const char* operation = "is_positive_semidefinite";
180 if (symbol.empty()) {
182 CasErrc::InvalidArgument, "symbol name must not be empty", operation);
183 }
184 for (auto it = scope_stack_.rbegin(); it != scope_stack_.rend(); ++it) {
185 Definiteness d = it->properties.get_definiteness(symbol);
186 if (d != Definiteness::Unknown) {
190 }
191 }
193}
194
195}
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
内部 AST 定义。