Esempio n. 1
0
level replace_level_fn::apply(level const & l) {
    optional<level> r = m_f(l);
    if (r)
        return *r;
    switch (l.kind()) {
    case level_kind::Succ:
        return update_succ(l, apply(succ_of(l)));
    case level_kind::Max: case level_kind::IMax:
        return update_max(l, apply(to_max_core(l).m_lhs), apply(to_max_core(l).m_rhs));
    case level_kind::Zero: case level_kind::Param: case level_kind::Meta: case level_kind::Global:
        return l;
    }
    lean_unreachable(); // LCOV_EXCL_LINE
}
Esempio n. 2
0
 level apply(level const & l) {
     auto r = m_lvl_cache.find(l);
     if (r != m_lvl_cache.end())
         return *r;
     level res;
     switch (l.kind()) {
     case level_kind::Zero:   case level_kind::Param:
     case level_kind::Global: case level_kind::Meta:
         res = l;
         break;
     case level_kind::Succ:
         res = update_succ(l, apply(succ_of(l)));
         break;
     case level_kind::Max:
         res = update_max(l, apply(max_lhs(l)), apply(max_rhs(l)));
         break;
     case level_kind::IMax:
         res = update_max(l, apply(imax_lhs(l)), apply(imax_rhs(l)));
         break;
     }
     m_lvl_cache.insert(res);
     return res;
 }