use super::term::OTerm;
use crate::typing::{Normalizer, RewriteRule, Subst, term};
#[must_use]
pub fn normalizer(rules: Vec<(OTerm, OTerm)>) -> Normalizer {
Normalizer::from_rules(
rules
.into_iter()
.map(|(l, r)| RewriteRule {
lhs: l.lower(),
rhs: r.lower(),
})
.collect(),
)
}
#[must_use]
pub fn solution(subst: &Subst) -> Vec<(String, OTerm)> {
let mut out: Vec<(String, OTerm)> = subst
.iter()
.map(|(k, v)| (k.clone(), OTerm::lift(&term::apply(v, subst))))
.collect();
out.sort_by(|a, b| a.0.cmp(&b.0));
out
}