module Make (
T
:
TermInner.S
)
: sig
.. end
type
ty = T.t
type 'a
env = ('a, ty) Env.t
We only consider monomorphic types
type
cache
Cache for memoizing cardinality computations
val create_cache : ?default_card:int -> unit -> cache
default_card
: if provided, the uninterpreted types we
know nothing about will be considered as having this card
val cardinality_ty : ?cache:cache ->
'a env -> ty -> Cardinality.t
cardinality_ty ty
computes the cardinality of the type
ty
, which
must be monomorphic.
RaisesEmptyData
if there is some ill-defined data in env
Polymorphic
if the type is polymorphic,
or depends on polymorphic types
val cardinality_ty_id : ?cache:cache ->
'a env -> ID.t -> Cardinality.t
cardinality id
computes the cardinality of the type
named
id
.
RaisesEmptyData
if there is some ill-defined data in env
Error
if id
is not a valid type in env
Polymorphic
if the type is polymorphic,
or depends on polymorphic types
val check_non_zero : ?cache:cache ->
'a env -> ('a, ty) Statement.t -> unit
check_non_zero env stmt
checks that stmt
is not a definition of
an empty datatype
val is_incomplete : 'a env -> ty -> bool
Is the type incomplete, that is, some values from the input type
are not present in this encoding?
val is_abstract : 'a env -> ty -> bool
Is the type a quotient over the input types (i.e. several distinct
values of the input types are encoded as one value)?