Ltac2_plugin.Tac2typesRedefinition of Ltac1 data structures because of impedance mismatch
type 'a thunk = (unit, 'a) Tac2ffi.fun1type quantified_hypothesis = Tactypes.quantified_hypothesis = | | AnonHyp of int | 
| | NamedHyp of Names.lident | 
type explicit_bindings = (quantified_hypothesis * EConstr.t) listtype bindings = | | ImplicitBindings of EConstr.t list | 
| | ExplicitBindings of explicit_bindings | 
| | NoBindings | 
type constr_with_bindings = EConstr.constr * bindingstype core_destruction_arg = | | ElimOnConstr of constr_with_bindings Proofview.tactic | 
| | ElimOnIdent of Names.Id.t | 
| | ElimOnAnonHyp of int | 
type destruction_arg = core_destruction_argtype intro_pattern = | | IntroForthcoming of bool | 
| | IntroNaming of intro_pattern_naming | 
| | IntroAction of intro_pattern_action | 
and intro_pattern_naming = | | IntroIdentifier of Names.Id.t | 
| | IntroFresh of Names.Id.t | 
| | IntroAnonymous | 
and intro_pattern_action = | | IntroWildcard | 
| | IntroOrAndPattern of or_and_intro_pattern | 
| | IntroInjection of intro_pattern list | 
| | IntroApplyOn of EConstr.t thunk * intro_pattern | 
| | IntroRewrite of bool | 
and or_and_intro_pattern = | | IntroOrPattern of intro_pattern list list | 
| | IntroAndPattern of intro_pattern list | 
type hyp_location = Names.Id.t * occurrences * hyp_location_flagtype induction_clause = destruction_arg * intro_pattern_naming option * or_and_intro_pattern option * clause optiontype rewriting = orientation option * multi * constr_with_bindings Proofview.tactictype assertion = | | AssertType of intro_pattern option * EConstr.constr * unit thunk option | 
| | AssertValue of Names.Id.t * EConstr.constr | 
type red_flag = Names.GlobRef.t Genredexpr.glob_red_flagtype red_context = (Pattern.constr_pattern * occurrences) option