sig
  module Evalenv :
    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
end