sig
  type result = TypeCore.env option * Derivations.derivation
  val unify : TypeCore.env -> TypeCore.var -> TypeCore.var -> TypeCore.env
  val add : TypeCore.env -> TypeCore.var -> TypeCore.typ -> TypeCore.env
  val add_perm : TypeCore.env -> TypeCore.typ -> TypeCore.env
  val sub :
    TypeCore.env -> TypeCore.var -> TypeCore.typ -> Permissions.result
  val sub_type :
    TypeCore.env -> TypeCore.typ -> TypeCore.typ -> Permissions.result
  val add_hint : TypeCore.name option -> string -> TypeCore.name option
  val sub_constraint :
    TypeCore.env -> TypeCore.mode_constraint -> Permissions.result
  val keep_only_duplicable : TypeCore.env -> TypeCore.env
  val safety_check : TypeCore.env -> unit
end