8inline auto u_is_var(
const std::string& wc) {
11 if (it == m.end()) {
return false; }
12 auto value = std::dynamic_pointer_cast<const VariableNode>(
detail::node(it->second));
18 return [u_matches =
u_is_var(u_wc), a_wc](
20 if (!u_matches(m, var,
context)) {
return false; }
21 auto a = m.find(a_wc);
27 bool real_scale =
false) {
30 if (!independent(m, var,
context)) {
return false; }
31 std::optional<detail::AssumptionFacts> assumptions;
32 if (
context.assumptions()) { assumptions.emplace(*
context.assumptions()); }
35 return (!real_scale ||
43 return [u_matches =
u_is_var(wc), wc](
45 if (!u_matches(m, var,
context)) {
return false; }
46 std::optional<detail::AssumptionFacts> assumptions;
47 if (
context.assumptions()) { assumptions.emplace(*
context.assumptions()); }
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
Result< Tribool > query_nonzero_value(const Node &node, const FactsQuery &facts, Domain domain, ComputationContext &context)
const FactsQuery & no_facts() noexcept
Result< Tribool > query_real_value(const Node &node, const FactsQuery &facts, ComputationContext &context)
void load_exponential_rules(std::vector< detail::IntegrationEntry > &table)
void load_trig_primitives_rules(std::vector< detail::IntegrationEntry > &table)
void load_scaled_radical_rules(std::vector< detail::IntegrationEntry > &table)
auto u_is_var_a_nonzero(const std::string &u_wc, const std::string &a_wc, bool real_scale=false)
auto u_is_var_a_indep(const std::string &u_wc, const std::string &a_wc)
void load_algebraic_elementary_rules(std::vector< detail::IntegrationEntry > &table)
FunctionNode::FuncType FT
void load_trig_squares_rules(std::vector< detail::IntegrationEntry > &table)
void load_polynomial_rules(std::vector< detail::IntegrationEntry > &table)
void load_hyperbolic_rules(std::vector< detail::IntegrationEntry > &table)
auto u_is_var(const std::string &wc)
void load_inverse_trig_rules(std::vector< detail::IntegrationEntry > &table)
auto u_is_real_var(const std::string &wc)
void load_exponential_trig_rules(std::vector< detail::IntegrationEntry > &table)
void load_logarithmic_rules(std::vector< detail::IntegrationEntry > &table)
void load_exponential_base_rules(std::vector< detail::IntegrationEntry > &table)
void load_algebraic_reciprocals_rules(std::vector< detail::IntegrationEntry > &table)
void load_algebraic_radicals_rules(std::vector< detail::IntegrationEntry > &table)
void load_scaled_trig_rules(std::vector< detail::IntegrationEntry > &table)
void load_trig_derivatives_rules(std::vector< detail::IntegrationEntry > &table)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
bool expression_depends_on_variable(const detail::SymbolicNodePtr &expression, const std::string &variable, detail::RewriteBudget *budget)
__attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) std const VectorField const std::string const std::shared_ptr< SymbolicExpr > & a
std::unordered_map< std::string, SymbolicExpr > MatchMap
匹配结果映射,通配符名称 → 绑定的表达式
const std::string const ExprPtr & value
bool normalization_proved(const Result< Tribool > &result)