use std::sync::Arc;
use morok_ir::UOp;
use crate::rewrite::graph_rewrite;
use crate::symbolic::symbolic_simple;
use crate::z3::verify::verify_equivalence;
pub fn verify_simplifies_to(expr: Arc<UOp>, expected: Arc<UOp>) -> Arc<UOp> {
let matcher = symbolic_simple();
let simplified = graph_rewrite(&matcher, expr.clone(), &mut ());
verify_equivalence(&expr, &simplified).expect("Simplification should preserve semantics");
if !Arc::ptr_eq(&simplified, &expected) {
}
simplified
}
pub fn verify_preserves_semantics(expr: Arc<UOp>) -> Arc<UOp> {
let matcher = symbolic_simple();
let simplified = graph_rewrite(&matcher, expr.clone(), &mut ());
verify_equivalence(&expr, &simplified).expect("Simplification should preserve semantics");
simplified
}