We assume the existence of a function
assigning types to literal constants. It maps integer constants to
, float constants to
, character constants to
, and string constants to
.
We also refer to a function
, such that
``uses an oracle'' to instantiate all constructor function arguments at the beginning of
that are marked implicit; i.e., replace
with
, where the
s are inferred and
does not start like
.