void contractor_generic_forall::handle(contractor_status & cs, Enode * body, bool const p) {
    if (body->isOr()) {
        vector<Enode *> vec = elist_to_vector(body->getCdr());
        handle_disjunction(cs, vec, p);
        return;
    } else if (body->isAnd()) {
        vector<Enode *> vec = elist_to_vector(body->getCdr());
        handle_conjunction(cs, vec, p);
        return;
    } else if (body->isNot()) {
        handle(cs, body->get1st(), !p);
        return;
    } else {
        handle_atomic(cs, body, p);
        return;
    }
}
void contractor_generic_forall::handle(box & b, Enode * body, bool const p,  SMTConfig & config) {
    if (body->isOr()) {
        vector<Enode *> vec = elist_to_vector(body->getCdr());
        handle_disjunction(b, vec, p, config);
        return;
    } else if (body->isAnd()) {
        vector<Enode *> vec = elist_to_vector(body->getCdr());
        handle_conjunction(b, vec, p, config);
        return;
    } else if (body->isNot()) {
        handle(b, body->get1st(), !p, config);
        return;
    } else {
        handle_atomic(b, body, p, config);
        return;
    }
}
void contractor_generic_forall::handle_atomic(contractor_status & cs, Enode * body, bool const p) {
    vector<Enode*> vec;
    vec.push_back(body);
    handle_disjunction(cs, vec, p);
    return;
}
void contractor_generic_forall::handle_atomic(box & b, Enode * body, bool const p, SMTConfig & config) {
    vector<Enode*> vec;
    vec.push_back(body);
    handle_disjunction(b, vec, p, config);
    return;
}