(* when an 'ident option is None, the default is to apply the tactic to the current goal *) type reduction_kind = [ `Reduce | `Simpl | `Whd ] type 'term pattern = | Pattern of 'term type location = int * int type ('term, 'ident) tactic = | LocatedTactic of location * ('term, 'ident) tactic | Absurd | Apply of 'term | Assumption | Change of 'term * 'term * 'ident option (* what, with what, where *) | Change_pattern of 'term pattern * 'term * 'ident option (* what, with what, where *) | Contradiction | Cut of 'term | Decompose of 'ident * 'ident list (* which hypothesis, which principles *) | Discriminate of 'ident | Elim of 'term * 'term option (* what to elim, which principle to use *) | ElimType of 'term | Exact of 'term | Exists | Fold of reduction_kind * 'term | Fourier | Injection of 'ident | Intros of int option | Left | LetIn of 'term * 'ident | Named_intros of 'ident list | Reduce of reduction_kind * 'term pattern * 'ident option (* what, where *) | Reflexivity | Replace of 'term * 'term (* what, with what *) | Replace_pattern of 'term pattern * 'term | RewriteLeft of 'term * 'ident option | RewriteRight of 'term * 'ident option | Right | Ring | Split | Symmetry | Transitivity of 'term type 'tactic tactical = | LocatedTactical of location * 'tactic tactical | Fail | For of int * 'tactic tactical | IdTac | Repeat of 'tactic tactical | Seq of 'tactic tactical list (* sequential composition *) | Tactic of 'tactic | Then of 'tactic tactical * 'tactic tactical list | Tries of 'tactic tactical list (* try a sequence of tacticals until one succeeds, fail otherwise *) | Try of 'tactic tactical (* try a tactical and mask failures *) type binder_kind = [ `Lambda | `Pi | `Exists | `Forall ] type induction_kind = [ `Inductive | `CoInductive ] type sort_kind = [ `Prop | `Set | `Type | `CProp ] type case_pattern = string list type term = | LocatedTerm of location * term | Appl of term list | Appl_symbol of string * int * term list (* literal, args, instance *) | Binder of binder_kind * Cic.name * term option * term (* kind, name, type, body *) | Case of term * string * term option * (case_pattern * term) list (* what to match, inductive type, out type, list *) | LetIn of string * term * term (* name, body, where *) | LetRec of induction_kind * (string * term * term option * int) list * term (* (name, body, type, decreasing argument) list, where *) | Ident of string * subst list (* literal, substitutions *) | Meta of int * meta_subst list | Num of string * int (* literal, instance *) | Sort of sort_kind and meta_subst = term option and subst = string * term (* type cexpr = | Symbol of string option * string * (subst option) * string option (* h:xref, name, subst, definitionURL *) | LocalVar of string option * string (* h:xref, name *) | Meta of string option * string * meta_subst (* h:xref, name, meta_subst *) | Num of string option * string (* h:xref, value *) | Appl of string option * cexpr list (* h:xref, args *) | Binder of string option *string * decl * cexpr (* h:xref, name, decl, body *) | Letin of string option * def * cexpr (* h:xref, def, body *) | Letrec of string option * def list * cexpr (* h:xref, def list, body *) | Case of string option * cexpr * ((string * cexpr) list) (* h:xref, case_expr, named-pattern list *) and decl = string * cexpr (* name, type *) and def = string * cexpr (* name, body *) and subst = (UriManager.uri * cexpr) list and meta_subst = cexpr option list *)