conjure_core/rules/normalisers/sum.rs
1//! Normalising rules for `Sum`
2
3use conjure_core::ast::Expression as Expr;
4use conjure_core::rule_engine::{register_rule, ApplicationError, ApplicationResult, Reduction};
5
6use Expr::*;
7
8use crate::ast::SymbolTable;
9
10/// Removes sums with a single argument.
11///
12/// ```text
13/// sum([a]) ~> a
14/// ```
15#[register_rule(("Base", 8800))]
16fn remove_unit_vector_sum(expr: &Expr, _: &SymbolTable) -> ApplicationResult {
17 match expr {
18 Sum(_, exprs) if (exprs.len() == 1) => Ok(Reduction::pure(exprs[0].clone())),
19 _ => Err(ApplicationError::RuleNotApplicable),
20 }
21}