LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::anonymous_namespace{assumption_conditionals.cpp} 命名空间参考

函数

Tribool evaluate_symbol_sign (const AssumptionContext &ctx, const std::string &name, RelationOp op)
Tribool evaluate_zero_comparison (const AssumptionContext &ctx, const RelationalNode &relation)

函数说明

◆ evaluate_symbol_sign()

Tribool LMCAS::anonymous_namespace{assumption_conditionals.cpp}::evaluate_symbol_sign ( const AssumptionContext & ctx,
const std::string & name,
RelationOp op )

在文件 assumption_conditionals.cpp 第 11 行定义.

12 {
13 struct SignRule {
15 std::initializer_list<Sign> true_signs;
16 std::initializer_list<Sign> false_signs;
17 };
18 const SignRule rules[] = {
28 {Sign::Zero}},
31 };
32 for (const auto& rule : rules) {
33 if (rule.op != op) continue;
34 for (Sign sign : rule.true_signs) {
35 if (ctx.has_sign(name, sign)) return Tribool::True;
36 }
37 for (Sign sign : rule.false_signs) {
38 if (ctx.has_sign(name, sign)) return Tribool::False;
39 }
40 break;
41 }
42 return Tribool::Unknown;
43}
@ Unknown
Property cannot be determined
@ True
Property definitely holds
@ False
Property definitely does not hold
RelationOp
Stable relational operator used by public APIs.
const ExprPtr RelationOp op
__attribute__((visibility("default"))) Result< EqvProfile > eqv_profile_from_name(const std const std::string & name
Sign
Sign classification for symbols and expressions.

引用了 LMCAS::EQ, evaluate_symbol_sign(), LMCAS::False, LMCAS::GEQ, LMCAS::GT, LMCAS::LEQ, LMCAS::LT, LMCAS::name, LMCAS::Negative, LMCAS::NEQ, LMCAS::NonNegative, LMCAS::NonPositive, LMCAS::NonZero, LMCAS::op, LMCAS::Positive, LMCAS::True, LMCAS::Unknown , 以及 LMCAS::Zero.

被这些函数引用 evaluate_symbol_sign() , 以及 evaluate_zero_comparison().

函数调用图:
这是这个函数的调用关系图:

◆ evaluate_zero_comparison()

Tribool LMCAS::anonymous_namespace{assumption_conditionals.cpp}::evaluate_zero_comparison ( const AssumptionContext & ctx,
const RelationalNode & relation )

在文件 assumption_conditionals.cpp 第 45 行定义.

46 {
47 const auto lhs_var = std::dynamic_pointer_cast<const VariableNode>(relation.left());
48 const auto rhs_num = std::dynamic_pointer_cast<const NumberNode>(relation.right());
49 if (lhs_var && !lhs_var->is_constant() && rhs_num && rhs_num->is_zero()) {
50 return evaluate_symbol_sign(ctx, lhs_var->name(), relation.op());
51 }
52 const auto lhs_num = std::dynamic_pointer_cast<const NumberNode>(relation.left());
53 const auto rhs_var = std::dynamic_pointer_cast<const VariableNode>(relation.right());
54 if (lhs_num && lhs_num->is_zero() && rhs_var && !rhs_var->is_constant()) {
56 ctx, rhs_var->name(), detail::reversed_relation(relation.op()));
57 }
58 return Tribool::Unknown;
59}
Tribool evaluate_symbol_sign(const AssumptionContext &ctx, const std::string &name, RelationOp op)
constexpr RelationOp reversed_relation(RelationOp op) noexcept
ExprResult relation(const ExprPtr &lhs, const ExprPtr &rhs, RelationOp op)

引用了 evaluate_symbol_sign(), evaluate_zero_comparison(), LMCAS::relation(), LMCAS::detail::reversed_relation() , 以及 LMCAS::Unknown.

被这些函数引用 evaluate_zero_comparison().

函数调用图:
这是这个函数的调用关系图: