sig
  type 'a t
  type cs_term =
      [ `App of Syntax.symbol * Linear.QQVector.t list
      | `Floor of Linear.QQVector.t
      | `Inv of Linear.QQVector.t
      | `Mod of Linear.QQVector.t * Linear.QQVector.t
      | `Mul of Linear.QQVector.t * Linear.QQVector.t ]
  val pp : Format.formatter -> 'CoordinateSystem.t -> unit
  val pp_vector :
    'CoordinateSystem.t -> Format.formatter -> Linear.QQVector.t -> unit
  val pp_cs_term :
    'CoordinateSystem.t ->
    Format.formatter -> CoordinateSystem.cs_term -> unit
  val mk_empty : 'Syntax.context -> 'CoordinateSystem.t
  val get_context : 'CoordinateSystem.t -> 'Syntax.context
  val copy : 'CoordinateSystem.t -> 'CoordinateSystem.t
  val admit_term : 'CoordinateSystem.t -> 'Syntax.term -> unit
  val admit_cs_term :
    'CoordinateSystem.t -> CoordinateSystem.cs_term -> unit
  val const_id : int
  val dim : 'CoordinateSystem.t -> int
  val int_dim : 'CoordinateSystem.t -> int
  val real_dim : 'CoordinateSystem.t -> int
  val destruct_coordinate :
    'CoordinateSystem.t -> int -> CoordinateSystem.cs_term
  val term_of_coordinate : 'CoordinateSystem.t -> int -> 'Syntax.term
  val term_of_vec :
    'CoordinateSystem.t -> Linear.QQVector.t -> 'Syntax.term
  val cs_term_id :
    ?admit:bool -> 'CoordinateSystem.t -> CoordinateSystem.cs_term -> int
  val vec_of_term :
    ?admit:bool ->
    'CoordinateSystem.t -> 'Syntax.term -> Linear.QQVector.t
  val type_of_id : 'CoordinateSystem.t -> int -> [ `TyInt | `TyReal ]
  val polynomial_of_term :
    'CoordinateSystem.t -> 'Syntax.term -> Polynomial.Mvp.t
  val polynomial_of_vec :
    'CoordinateSystem.t -> Linear.QQVector.t -> Polynomial.Mvp.t
  val polynomial_of_coordinate :
    'CoordinateSystem.t -> int -> Polynomial.Mvp.t
  val term_of_polynomial :
    'CoordinateSystem.t -> Polynomial.Mvp.t -> 'Syntax.term
  val admits : 'CoordinateSystem.t -> 'Syntax.term -> bool
  val project_ideal :
    'CoordinateSystem.t ->
    Polynomial.Mvp.t list ->
    ?subterm:(Syntax.symbol -> bool) ->
    (Syntax.symbol -> bool) ->
    (int * 'Syntax.term * 'Syntax.formula) list
  val subcoordinates : 'CoordinateSystem.t -> int -> SrkUtil.Int.Set.t
  val direct_subcoordinates :
    'CoordinateSystem.t -> int -> SrkUtil.Int.Set.t
end