sig
  module AstEq :
    sig
      val eq_vars : Ast.Ast.var -> Ast.Ast.var -> int
      val eq_exps : Ast.Ast.exp -> Ast.Ast.exp -> bool
    end
  module Var :
    sig
      type t = Ast.Ast.var
      val compare : Ast.Ast.var -> Ast.Ast.var -> int
      val v_str : Ast.Ast.var -> string
      val str2var : string -> Ast.Ast.var
    end
  module VarMap :
    sig
      type key = Var.t
      type +'a t
      val empty : 'a t
      val is_empty : 'a t -> bool
      val add : key -> '-> 'a t -> 'a t
      val find : key -> 'a t -> 'a
      val remove : key -> 'a t -> 'a t
      val mem : key -> 'a t -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val map : ('-> 'b) -> 'a t -> 'b t
      val mapi : (key -> '-> 'b) -> 'a t -> 'b t
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
    end
  module SymUtils :
    sig
      val sym : Ast.Ast.exp -> bool
      val get_constraint_vars :
        string list -> Constraint.Constraint.cexp -> string list
      val get_sym_vars : Ast.Ast.exp -> Ast.Ast.var list
    end
  module RelationUtils :
    sig
      val set_field :
        string -> Ast.Ast.exp -> Ast.Ast.datafields -> Ast.Ast.datafields
      val get_field : Ast.Ast.datafields -> string -> Ast.Ast.exp
      val set_index_field :
        string -> int -> Ast.Ast.exp -> Ast.Ast.relation -> Ast.Ast.relation
      val get_index_field :
        string -> int -> Ast.Ast.relation -> Ast.Ast.exp option
    end
  module AstPrint :
    sig
      val pickle_var : Ast.Ast.var -> string
      val pickle_exp : Ast.Ast.exp -> string
    end
end