15#include <unordered_map>
24class AssumptionContext;
69 seed ^=
static_cast<std::size_t
>(key.
property) + 0x9e3779b9U
70 + (seed << 6U) + (seed >> 2U);
72 seed ^= std::hash<std::string>{}(key.
variable) + 0x9e3779b9U
73 + (seed << 6U) + (seed >> 2U);
101 explicit QueryInterface(
const AssumptionContext& ctx);
107 QueryTriboolResult query_positive(
const SymbolicExpr& expr)
const;
109 QueryTriboolResult query_positive_checked(
const SymbolicExpr& expr)
const;
112 QueryTriboolResult query_negative(
const SymbolicExpr& expr)
const;
114 QueryTriboolResult query_negative_checked(
const SymbolicExpr& expr)
const;
117 QueryTriboolResult query_nonnegative(
const SymbolicExpr& expr)
const;
119 QueryTriboolResult query_nonnegative_checked(
const SymbolicExpr& expr)
const;
122 QueryTriboolResult query_real(
const SymbolicExpr& expr)
const;
124 QueryTriboolResult query_real_checked(
const SymbolicExpr& expr)
const;
127 QueryTriboolResult query_integer(
const SymbolicExpr& expr)
const;
129 QueryTriboolResult query_integer_checked(
const SymbolicExpr& expr)
const;
132 QueryTriboolResult query_nonzero(
const SymbolicExpr& expr)
const;
134 QueryTriboolResult query_nonzero_checked(
const SymbolicExpr& expr)
const;
142 QueryTriboolResult query_algebraic(
const SymbolicExpr& expr)
const;
144 QueryTriboolResult query_algebraic_checked(
const SymbolicExpr& expr)
const;
147 QueryTriboolResult query_transcendental(
const SymbolicExpr& expr)
const;
149 QueryTriboolResult query_transcendental_checked(
const SymbolicExpr& expr)
const;
152 QueryTriboolResult query_finite(
const SymbolicExpr& expr)
const;
154 QueryTriboolResult query_finite_checked(
const SymbolicExpr& expr)
const;
157 QueryTriboolResult query_divergent(
const SymbolicExpr& expr)
const;
159 QueryTriboolResult query_divergent_checked(
const SymbolicExpr& expr)
const;
162 QueryTriboolResult query_periodic(
163 const SymbolicExpr& expr,
const std::string& variable)
const;
165 QueryTriboolResult query_periodic_checked(
166 const SymbolicExpr& expr,
const std::string& variable)
const;
172 QueryPeriodResult get_period(
173 const SymbolicExpr& expr,
const std::string& variable)
const;
175 QueryPeriodResult get_period_checked(
176 const SymbolicExpr& expr,
const std::string& variable)
const;
179 QueryTriboolResult query_positive_definite(
const SymbolicExpr& expr)
const;
181 QueryTriboolResult query_positive_definite_checked(
const SymbolicExpr& expr)
const;
184 QueryTriboolResult query_positive_semidefinite(
const SymbolicExpr& expr)
const;
186 QueryTriboolResult query_positive_semidefinite_checked(
const SymbolicExpr& expr)
const;
196 void invalidate_cache()
const;
204 struct ConditionSet {
206 std::vector<std::pair<std::string, Sign>> sign_conditions;
208 std::vector<std::pair<std::string, Domain>> domain_conditions;
210 std::vector<Relation> relational_conditions;
213 using QueryConditionSetsResult = Result<std::vector<ConditionSet>>;
230 QueryConditionSetsResult query_conditions(
231 const SymbolicExpr& expr, Sign target)
const;
233 QueryConditionSetsResult query_conditions_checked(
const SymbolicExpr& expr, Sign target)
const;
237 SymbolicExpr expression;
241 const AssumptionContext& ctx_;
245 mutable uint64_t observed_generation_;
249 mutable std::unordered_map<CacheKey, std::vector<CacheEntry>, CacheKeyHash> cache_;
253 bool is_unhandled_type(
const SymbolicExpr& expression)
const;
256 bool is_infinity_node(
const SymbolicExpr& expression)
const;
262 int get_infinity_sign(
const SymbolicExpr& expression)
const;
266 const SymbolicExpr& expr,
268 const std::string& operation,
270 const std::string& variable = {})
const;
272 std::vector<ConditionSet> query_conditions_impl(
273 const SymbolicExpr& expr,
Core enumerations and forward declarations for the Assumption System.
Result< Tribool > QueryTriboolResult
Tribool
Tri-state logic value for property queries.
@ PositiveSemiDefinite
All eigenvalues non-negative
@ PositiveDefinite
All eigenvalues positive
@ Finite
Has a finite value or limit
@ Divergent
Diverges to infinity or oscillates
Result< std::optional< SymbolicExpr > > QueryPeriodResult
PropType
Identifies which property is being queried, used as part of the cache key.
RelationStore class for storing relational constraints between symbolic expressions.
std::size_t operator()(const CacheKey &key) const
std::size_t expression_hash
bool operator==(const CacheKey &other) const
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.