src/qe/qe_mbp.cpp
/**
   \brief return two terms that are equal in the model.
   The distinct term t is false in model, so there 
   are at least two arguments of t that are equal in the model.
*/
\brief return two terms that are equal in the model.
The distinct term t is false in model, so there
are at least two arguments of t that are equal in the model.
\ brief return two terms that are equal in the model . The distinct term t is false in model so there are at least two arguments of t that are equal in the model .
expr_ref project_plugin::pick_equality(ast_manager& m, model& model, expr* t) {
    SASSERT(m.is_distinct(t));
    expr_ref val(m);
    expr_ref_vector vals(m);
    obj_map<expr, expr*> val2expr;
    app* alit = to_app(t);
    for (expr * e1 : *alit) {
        expr *e2;
        val = model(e1);
        if (val2expr.find(val, e2)) {
            return expr_ref(m.mk_eq(e1, e2), m);
        }
        val2expr.insert(val, e1);
        vals.push_back(val);
    }
    UNREACHABLE();
    return expr_ref(nullptr, m);
}
expr_ref project_plugin :: pick_equality ( ast_manager & m , model & model , expr * t ) { SASSERT ( m . is_distinct ( t ) ) ; expr_ref val ( m ) ; expr_ref_vector vals ( m ) ; obj_map < expr , expr * > val2expr ; app * alit = to_app ( t ) ; for ( expr * e1 : * alit ) { expr * e2 ; val = model ( e1 ) ; if ( val2expr . find ( val , e2 ) ) { return expr_ref ( m . mk_eq ( e1 , e2 ) , m ) ; } val2expr . insert ( val , e1 ) ; vals . push_back ( val ) ; } UNREACHABLE ( ) ; return expr_ref ( nullptr , m ) ; }
\brief return two terms that are equal in the model.
\ brief return two terms that are equal in the model .