10 auto& world = type->world();
11 return world.raw_app(type, callee, arg);
24 for (
auto kv :
tuple->ops())
25 if (kv->proj(2, 0) == k)
return kv->proj(2, 1);
33 auto& w = arg->
world();
34 auto [c, k] = arg->
projs<2>();
38 for (
auto kv :
tuple->ops()) {
40 if (key == k)
return w.lit_tt();
42 return tuple->is_closed() ? w.lit_ff() :
nullptr;
45 if (
auto pack =
init->arg()->isa_imm<
Pack>()) w.WLOG(
"packs not yet implemented: {}", pack);
52 auto& w = type->world();
53 auto [ms, kv] = arg->
projs<2>();
57 auto n =
init->decurry()->arg();
58 auto V =
init->decurry()->decurry()->arg();
63 for (
size_t i = 0, e = *l; i != e; ++i) {
65 auto cur =
tuple->proj(e, i);
69 new_ops.emplace_back(kv);
71 new_ops.emplace_back(
tuple->proj(e, i));
75 if (!updated) new_ops.emplace_back(kv);
79 auto new_n = w.lit_nat(new_ops.size());
80 auto app = w.app(w.annex(
insert), K);
83 return w.app(w.app(app, new_n), new_ops);
87 if (
auto pack =
init->arg()->isa_imm<
Pack>()) w.WLOG(
"packs not yet implemented: {}", pack);
static auto isa(const Def *def)
World & world() const noexcept
auto projs(F f) const
Splits this Def via Def::projections into an Array (if A == std::dynamic_extent) or std::array (other...
static std::optional< T > isa(const Def *def)
A (possibly paramterized) Tuple.
Data constructor for a Sigma.
const Def * normalize_insert(const Def *type, const Def *, const Def *arg)
const Def * normalize_size(const Def *, const Def *, const Def *arg)
const Def * normalize_contains(const Def *, const Def *, const Def *arg)
const Def * normalize_get(const Def *, const Def *, const Def *arg)
const Def * normalize_init(const Def *type, const Def *callee, const Def *arg)
Vector< const Def * > DefVec
#define MIM_ord_NORMALIZER_IMPL