RewriteTODO: document and clean me!
exception RewriteFailure of Environ.env * Evd.evar_map * Pretype_errors.pretype_errortype ('constr, 'redexpr) strategy_ast = | | StratId | 
| | StratFail | 
| | StratRefl | 
| | StratUnary of unary_strategy * ( 'constr, 'redexpr ) strategy_ast | 
| | StratBinary of binary_strategy
  * ( 'constr, 'redexpr ) strategy_ast
  * ( 'constr, 'redexpr ) strategy_ast | 
| | StratNAry of nary_strategy * ( 'constr, 'redexpr ) strategy_ast list | 
| | StratConstr of 'constr * bool | 
| | StratTerms of 'constr list | 
| | StratHints of bool * string | 
| | StratEval of 'redexpr | 
| | StratFold of 'constr | 
type evars = Evd.evar_map * Evar.Set.ttype rewrite_result_info = {| rew_car : EConstr.constr; | 
| rew_from : EConstr.constr; | 
| rew_to : EConstr.constr; | 
| rew_prf : rewrite_proof; | 
| rew_evars : evars; | 
}val strategy_of_ast : 
  ( Glob_term.glob_constr * EConstr.constr Tactypes.delayed_open,
    Redexpr.red_expr Tactypes.delayed_open )
    strategy_ast ->
  strategyval map_strategy : 
  ( 'a -> 'b ) ->
  ( 'c -> 'd ) ->
  ( 'a, 'c ) strategy_ast ->
  ( 'b, 'd ) strategy_astval pr_strategy : 
  ( 'a -> Pp.t ) ->
  ( 'b -> Pp.t ) ->
  ( 'a, 'b ) strategy_ast ->
  Pp.tval cl_rewrite_clause_strat : 
  strategy ->
  Names.Id.t option ->
  unit Proofview.tacticEntry point for user-level "rewrite_strat"
val cl_rewrite_clause : 
  EConstr.t Tactypes.with_bindings Tactypes.delayed_open ->
  bool ->
  Locus.occurrences ->
  Names.Id.t option ->
  unit Proofview.tacticEntry point for user-level "setoid_rewrite"
val is_applied_rewrite_relation : 
  Environ.env ->
  Evd.evar_map ->
  EConstr.rel_context ->
  EConstr.constr ->
  EConstr.types optionval get_reflexive_proof : 
  Environ.env ->
  Evd.evar_map ->
  EConstr.constr ->
  EConstr.constr ->
  Evd.evar_map * EConstr.constrval get_symmetric_proof : 
  Environ.env ->
  Evd.evar_map ->
  EConstr.constr ->
  EConstr.constr ->
  Evd.evar_map * EConstr.constrval get_transitive_proof : 
  Environ.env ->
  Evd.evar_map ->
  EConstr.constr ->
  EConstr.constr ->
  Evd.evar_map * EConstr.constrval setoid_symmetry : unit Proofview.tacticval setoid_symmetry_in : Names.Id.t -> unit Proofview.tacticval setoid_reflexivity : unit Proofview.tacticval setoid_transitivity : EConstr.constr option -> unit Proofview.tacticval apply_strategy : 
  strategy ->
  Environ.env ->
  Names.Id.Set.t ->
  EConstr.constr ->
  (bool * EConstr.constr) ->
  evars ->
  rewrite_resultmodule Internal : sig ... end