27 [[nodiscard]] std::shared_ptr<const SymbolicNode>
get_result()
const;
30 const std::shared_ptr<const SymbolicNode>& lhs,
31 const std::shared_ptr<const SymbolicNode>&
rhs);
60 std::shared_ptr<const SymbolicNode>
result;
64 void set_result(std::shared_ptr<const SymbolicNode> candidate);
70 std::shared_ptr<const SymbolicNode>& term);
72 const std::vector<std::shared_ptr<const SymbolicNode>>& operands);
74 const std::vector<std::shared_ptr<const SymbolicNode>>& operands);
76 const std::shared_ptr<const SymbolicNode>& lhs,
77 const std::shared_ptr<const SymbolicNode>&
rhs);
79 const std::shared_ptr<const SymbolicNode>& lhs,
80 const std::shared_ptr<const SymbolicNode>&
rhs);
82 const std::shared_ptr<const SymbolicNode>& lhs,
83 const std::shared_ptr<const SymbolicNode>&
rhs);
85 const std::vector<std::shared_ptr<const SymbolicNode>>& operands);
87 const std::vector<std::shared_ptr<const SymbolicNode>>& operands);
89 const std::shared_ptr<const SymbolicNode>& left,
90 const std::shared_ptr<const SymbolicNode>&
right);
94 const MatrixNode& matrix,
const std::shared_ptr<const NumberNode>& scalar);
96 const std::shared_ptr<const SymbolicNode>& base,
97 const std::shared_ptr<const SymbolicNode>&
exponent);
107 std::shared_ptr<const SymbolicNode>& argument,
bool normalize_argument);
109 const std::vector<std::shared_ptr<const SymbolicNode>>& arguments);
112 const std::shared_ptr<const SymbolicNode>& argument);
114 const std::shared_ptr<const SymbolicNode>& argument);
117 const SymbolicNode& node, std::shared_ptr<const SymbolicNode>& argument);
119 const std::shared_ptr<const NumberNode>& node);
122 const std::shared_ptr<const NumberNode>& outer_exponent)
const;
124 const std::shared_ptr<const SymbolicNode>& node);
126 const std::shared_ptr<const SymbolicNode>& argument)
const;
128 const std::shared_ptr<const SymbolicNode>& argument)
const;
函数节点,表示数学函数调用(三角函数、对数、特殊函数等)。
bool can_combine_nested_power(const PowerNode &inner, const std::shared_ptr< const NumberNode > &outer_exponent) const
bool try_normalize_squared_norm(const SymbolicNode &node, std::shared_ptr< const SymbolicNode > &argument)
bool normalize_unary_function(FunctionNode::FuncType type, const std::shared_ptr< const SymbolicNode > &argument)
std::shared_ptr< const SymbolicNode > try_assumption_simplify(const std::shared_ptr< const SymbolicNode > &node)
bool normalize_nested_imaginary_power(const PowerNode &base, const std::shared_ptr< const NumberNode > &exponent)
bool finish_squared_norm(const SymbolicNode &node, std::shared_ptr< const SymbolicNode > &argument, bool normalize_argument)
void visit(const NumberNode &node) override
std::shared_ptr< const SymbolicNode > collect_product(const std::vector< std::shared_ptr< const SymbolicNode > > &operands)
std::shared_ptr< const SymbolicNode > distribute_product(const std::shared_ptr< const SymbolicNode > &lhs, const std::shared_ptr< const SymbolicNode > &rhs)
std::shared_ptr< const NumberNode > extract_term_coefficient(std::shared_ptr< const SymbolicNode > &term)
bool normalize_natural_logarithm(const std::shared_ptr< const SymbolicNode > &argument)
std::shared_ptr< const SymbolicNode > expand_product(const std::shared_ptr< const SymbolicNode > &lhs, const std::shared_ptr< const SymbolicNode > &rhs)
std::shared_ptr< const SymbolicNode > expand_complex_product(const std::shared_ptr< const SymbolicNode > &lhs, const std::shared_ptr< const SymbolicNode > &rhs)
std::shared_ptr< const SymbolicNode > scale_matrix(const MatrixNode &matrix, const std::shared_ptr< const NumberNode > &scalar)
bool normalize_nested_power(const PowerNode &base, const std::shared_ptr< const SymbolicNode > &exponent)
bool normalize_logarithm(FunctionNode::FuncType type, const std::vector< std::shared_ptr< const SymbolicNode > > &arguments)
NormalizationVisitor(detail::RewriteBudget &, FactsQuery &&, Domain)=delete
NormalizationVisitor(detail::RewriteBudget &budget, const FactsQuery &facts, Domain domain)
void set_result(std::shared_ptr< const SymbolicNode > candidate)
std::shared_ptr< const SymbolicNode > collect_expanded_product(const std::shared_ptr< const SymbolicNode > &lhs, const std::shared_ptr< const SymbolicNode > &rhs)
std::shared_ptr< const SymbolicNode > collect_sum(const std::vector< std::shared_ptr< const SymbolicNode > > &operands)
const FactsQuery & facts_
std::shared_ptr< const SymbolicNode > simplify_assumed_square_root(const std::shared_ptr< const SymbolicNode > &argument) const
std::shared_ptr< const SymbolicNode > result
bool normalize_matrix_sum(const std::vector< std::shared_ptr< const SymbolicNode > > &operands)
ComputationContext & context_
std::shared_ptr< const SymbolicNode > normalize_matrix_product(const std::vector< std::shared_ptr< const SymbolicNode > > &operands)
bool normalize_product_power(const MultiplyNode &base, const std::shared_ptr< const SymbolicNode > &exponent)
void distribute_power(const MultiplyNode &base, const std::shared_ptr< const SymbolicNode > &exponent)
void merge_complex_terms(std::vector< std::shared_ptr< const SymbolicNode > > &operands)
std::shared_ptr< const SymbolicNode > matrix_product_element(const MatrixNode &left, const MatrixNode &right, std::size_t row, std::size_t col)
bool normalize_function_parity(FunctionNode::FuncType type, const std::shared_ptr< const SymbolicNode > &argument)
std::shared_ptr< const SymbolicNode > fuse_matrix_product(const std::shared_ptr< const SymbolicNode > &left, const std::shared_ptr< const SymbolicNode > &right)
std::shared_ptr< const SymbolicNode > simplify_assumed_absolute(const std::shared_ptr< const SymbolicNode > &argument) const
static bool is_positive_integer_number(const std::shared_ptr< const NumberNode > &node)
bool normalize_power_identity(const std::shared_ptr< const SymbolicNode > &base, const std::shared_ptr< const SymbolicNode > &exponent)
std::shared_ptr< const SymbolicNode > get_result() const
std::shared_ptr< const SymbolicNode > normalize_bound_body(const SymbolicNode &node)
连乘节点,表示符号有限/无限连乘 prod_{k=a}^{b} f(k).
求和节点,表示符号有限/无限求和 sum_{k=a}^{b} f(k).
SymbolicVisitor()=default
const FactsQuery & no_facts() noexcept
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
Domain
Mathematical domain hierarchy (least specific → most specific). Complex ⊃ Real ⊃ Algebraic ⊃ Rational...
const NumberDomainSet & domain