conjure_core/rules/normalisers/
sum.rs
1use conjure_core::ast::Expression as Expr;
4use conjure_core::rule_engine::{register_rule, ApplicationResult, Reduction};
5
6use crate::ast::SymbolTable;
7use crate::rule_engine::ApplicationError::RuleNotApplicable;
8
9#[register_rule(("Base", 8800))]
15fn remove_unit_vector_sum(expr: &Expr, _: &SymbolTable) -> ApplicationResult {
16 let Expr::Sum(_, e) = expr else {
17 return Err(RuleNotApplicable);
18 };
19
20 let exprs = e.as_ref().clone().unwrap_list().ok_or(RuleNotApplicable)?;
21
22 if exprs.len() == 1 {
23 Ok(Reduction::pure(exprs[0].clone()))
24 } else {
25 Err(RuleNotApplicable)
26 }
27}