sig
  type dim = int option
  type matrix = Ctypes.c_object * Matrix.dim list
  module MACHINE :
    sig
      type t = matrix
      val compare : t -> t -> int
      val pretty : Format.formatter -> t -> unit
    end
  module NATURAL :
    sig
      type t = matrix
      val compare : t -> t -> int
      val pretty : Format.formatter -> t -> unit
    end
  val of_array : Ctypes.arrayinfo -> Matrix.matrix
  val id : Matrix.dim list -> string
  val natural_id : Ctypes.c_object -> string
  val merge : Matrix.dim list -> Matrix.dim list -> Matrix.dim list option
  type denv = {
    size_var : Lang.F.var list;
    size_val : Lang.F.term list;
    index_var : Lang.F.var list;
    index_val : Lang.F.term list;
    index_range : Lang.F.pred list;
    index_offset : Lang.F.term list;
    monotonic : bool;
  }
  val denv : Matrix.dim list -> Matrix.denv
  val size : Matrix.matrix -> Lang.F.term list
  val tau : Ctypes.c_object -> Matrix.dim list -> Lang.F.tau
end