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}