expr to_nat_expr_core(mpz const & n) { lean_assert(n >= 0); if (n == 1) return mk_nat_one(); else if (n % mpz(2) == 0) return mk_nat_bit0(to_nat_expr(n / 2)); else return mk_nat_bit1(to_nat_expr(n / 2)); }
expr from_string_core(std::string const & s) { expr r = *g_empty; for (unsigned i = 0; i < s.size(); i++) { expr n = to_nat_expr(mpz(static_cast<unsigned char>(s[i]))); expr c = mk_app(*g_char_of_nat, n); r = mk_app(*g_str, c, r); } return r; }