1
use conjure_cp::ast::SymbolTable;
2
use conjure_cp::ast::{Atom, Expression as Expr};
3
use conjure_cp::rule_engine::{
4
    ApplicationError::RuleNotApplicable, ApplicationResult, RuleEffect, register_rule,
5
};
6

            
7
use crate::types::int::IntOrder;
8

            
9
/// Replace an order-represented reference with its bit vector.
10
#[register_rule("SAT", 9500, [Atomic])]
11
38411602
fn integer_decision_representation_order(expr: &Expr, _: &SymbolTable) -> ApplicationResult {
12
38411602
    let Expr::Atomic(_, Atom::Reference(reference)) = expr else {
13
13192416
        return Err(RuleNotApplicable);
14
    };
15
25219186
    let state = reference
16
25219186
        .get_repr_as::<IntOrder>()
17
25219186
        .ok_or(RuleNotApplicable)?;
18
48580
    Ok(RuleEffect::pure(state.sat_int_expr()))
19
38411602
}