sig
  type t
  val of_num : int -> Indexes.t
  val of_var : Variable.t -> Indexes.t
  val add : Indexes.t -> int -> Indexes.t
  val get_var : Indexes.t -> Variable.t option
  val get_shift : Indexes.t -> int
  val to_string : Indexes.t -> string
  val to_tex : Indexes.t -> string
  val max : Indexes.t -> Indexes.t -> Indexes.t
  val min : Indexes.t -> Indexes.t -> Indexes.t
  val equal : Indexes.t -> Indexes.t -> bool
  val total_compare : Indexes.t -> Indexes.t -> int
  val compute_term : Indexes.t -> int -> int
  type variable = Variable.t
  type term = t
  type substituable = t
  val substitute : substituable -> var:variable -> by:term -> substituable
  module LoopingMap :
    sig
      type loopable = t
      type 'a t
      val empty : 'a t
      val add : 'a t -> key:loopable -> data:'-> 'a t
      val find : 'a t -> key:loopable -> 'a option
    end
  val inverse : Indexes.t -> Indexes.t
end