sig
  type constraintenv = Constraint.Constraint.cexp list AstUtils.VarMap.t
  type typeconstraint =
      string ->
      Ast.Ast.relation ->
      Evalenv.Evalenv.constraintenv -> Evalenv.Evalenv.constraintenv
  type evalenv = {
    typeconstraints : Evalenv.Evalenv.typeconstraint MapUtils.StringMap.t;
    tyenv : Ast.Ast.typerep MapUtils.StringMap.t;
    tydefenv : Ast.Ast.userty MapUtils.StringMap.t;
    functions : Ast.Ast.fundecl MapUtils.StringMap.t;
    globalbindings : Ast.Ast.exp AstUtils.VarMap.t;
    localbindings : Ast.Ast.exp AstUtils.VarMap.t;
    constraintbindings : Evalenv.Evalenv.constraintenv;
  }
  val default_tyconstraint :
    string ->
    Ast.Ast.relation ->
    Evalenv.Evalenv.constraintenv -> Evalenv.Evalenv.constraintenv
  val empty_evalenv : Evalenv.Evalenv.evalenv
  val addFunDecl :
    Evalenv.Evalenv.evalenv -> Ast.Ast.fundecl -> Evalenv.Evalenv.evalenv
  val lookupFunDecl :
    Evalenv.Evalenv.evalenv -> string -> Ast.Ast.fundecl option
  val bindTypeGlobalEnv :
    Evalenv.Evalenv.evalenv ->
    string -> Ast.Ast.typerep -> Evalenv.Evalenv.evalenv
  val addTypeDecl :
    Evalenv.Evalenv.evalenv ->
    Ast.Ast.userty -> Ast.Ast.constraintbody list -> Evalenv.Evalenv.evalenv
  val lookupTypeDeclByData :
    Evalenv.Evalenv.evalenv -> string -> Ast.Ast.userty option
  val lookupType :
    Evalenv.Evalenv.evalenv -> Ast.Ast.var -> Ast.Ast.typerep option
  val lookupTypeConstraints :
    Evalenv.Evalenv.evalenv ->
    string -> Evalenv.Evalenv.typeconstraint option
  val addConstraintGlobalEnv :
    Evalenv.Evalenv.evalenv ->
    Ast.Ast.var -> Constraint.Constraint.cexp -> Evalenv.Evalenv.evalenv
  val addConstraintListGlobalEnv :
    Evalenv.Evalenv.evalenv ->
    Ast.Ast.var -> Constraint.Constraint.cexp list -> Evalenv.Evalenv.evalenv
  val lookupConstraintsEnv :
    Evalenv.Evalenv.evalenv -> Ast.Ast.var -> Constraint.Constraint.cexp list
  val lookupValueEnv :
    Evalenv.Evalenv.evalenv -> Ast.Ast.var -> Ast.Ast.exp option
  val bindValueGlobalEnv :
    Evalenv.Evalenv.evalenv ->
    Ast.Ast.var -> Ast.Ast.exp -> Evalenv.Evalenv.evalenv
  val bindValueLocalEnv :
    Evalenv.Evalenv.evalenv ->
    Ast.Ast.var -> Ast.Ast.exp -> Evalenv.Evalenv.evalenv
  val lookupRelationGlobalEnv :
    Evalenv.Evalenv.evalenv -> Ast.Ast.var -> Ast.Ast.relation option
  val addConstraint :
    Evalenv.Evalenv.evalenv ->
    string -> Ast.Ast.constraintbody list -> Evalenv.Evalenv.evalenv
end