8#include <unordered_map>
9#include <unordered_set>
18class AssumptionContext;
21using MatchMap = std::unordered_map<std::string, SymbolicExpr>;
35 static bool match(
const SymbolicExpr& pattern,
const SymbolicExpr&
target,
36 const std::unordered_set<std::string>&
wildcards,
46 static SymbolicExpr replace(
const SymbolicExpr& template_expr,
const MatchMap&
bindings,
bool use_rest =
true);
52 SymbolicExpr replacement;
53 std::unordered_set<std::string> wildcards;
55 std::function<bool(
const MatchMap&)> condition;
62 std::function<bool(
const MatchMap&,
const AssumptionContext*)> assumption_condition;
64 Rule(SymbolicExpr p, SymbolicExpr r, std::unordered_set<std::string> w,
65 std::function<
bool(
const MatchMap&)> c =
nullptr)
66 : pattern(std::move(p)), replacement(std::move(r)),
67 wildcards(std::move(w)), condition(std::move(c)) {}
69 Rule(SymbolicExpr p, SymbolicExpr r, std::unordered_set<std::string> w,
70 std::function<
bool(
const MatchMap&,
const AssumptionContext*)> ac)
72 wildcards(std::move(w)), assumption_condition(std::move(ac)) {}
77 std::vector<Rule> rules;
84 void add_rule(
const Rule& rule);
92 Result<SymbolicExpr> apply(
93 const SymbolicExpr& expr,
int max_iterations = 100)
const;
94 Result<SymbolicExpr> apply_checked(
95 const SymbolicExpr& expr,
96 ComputationContext& context,
97 int max_iterations = 100)
const;
103 Result<SymbolicExpr> apply_step(
const SymbolicExpr& expr)
const;
104 Result<SymbolicExpr> apply_step_checked(
105 const SymbolicExpr& expr,
106 ComputationContext& context)
const;
111 const std::vector<Rule>& get_rules()
const {
return rules; }
const std::string const SymbolicNodePtr & replacement
__attribute__((visibility("default"))) ComplexSymbolicResult complex_exp_form_checked(std __attribute__((visibility("default"))) ComplexSymbolicResult complex_exp_form_checked(std __attribute__((visibility("default"))) ComplexSymbolicResult complex_trig_form_checked(std __attribute__((visibility("default"))) ComplexSymbolicResult complex_trig_form_checked(std __attribute__((visibility("default"))) ComplexRootsResult solve_complex_nth_root_checked(std __attribute__((visibility("default"))) ComplexRootsResult solve_complex_nth_root_checked(std __attribute__((visibility("default"))) ComplexRootsResult solve_complex_quadratic_checked(std __attribute__((visibility("default"))) ComplexRootsResult solve_complex_quadratic_checked(std std::shared_ptr< SymbolicExpr > r
SymbolicExpr wildcard(const std::string &name)
const std::vector< Binding > & bindings
const ExprPtr const std::vector< std::string > & wildcards
std::unordered_map< std::string, SymbolicExpr > MatchMap
匹配结果映射,通配符名称 → 绑定的表达式
__attribute__((visibility("default"))) Result< EqvProfile > eqv_profile_from_name(const std const std::string & name
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.