type direction = [ `Left | `Right ]
type reduction_kind = [ `Reduce | `Simpl | `Whd ]
-type 'term pattern = Pattern of 'term
+(* type 'term pattern = Pattern of 'term *)
+
+ (* everywhere includes goal and hypotheses *)
+type 'term pattern = [ `Goal | `Everywhere ]
(* when an 'ident option is None, the default is to apply the tactic
to the current goal *)
type ('term, 'ident) tactic =
| LocatedTactic of CicAst.location * ('term, 'ident) tactic
- | Absurd
+ | Absurd of 'term
| Apply of 'term
+ | Auto
| Assumption
| Change of 'term * 'term * 'ident option (* what, with what, where *)
| Change_pattern of 'term pattern * 'term * 'ident option
| Exists
| Fold of reduction_kind * 'term
| Fourier
+ | Hint
| Injection of 'ident
| Intros of int option * 'ident list
| Left
| LetIn of 'term * 'ident
(* | Named_intros of 'ident list (* joined with Intros above *) *)
- | Reduce of reduction_kind * 'term pattern * 'ident option (* what, where *)
+(* | Reduce of reduction_kind * 'term pattern * 'ident option (* what, where *) *)
+ | Reduce of reduction_kind * ('term list * 'term pattern) option
+ (* kind, (what, where)
+ * if second argument is None, reduction is applied to the current goal,
+ * otherwise to each occurrence of terms given in list occuring in term
+ * pattern *)
| Reflexivity
| Replace of 'term * 'term (* what, with what *)
| Replace_pattern of 'term pattern * 'term
| `Theorem
]
+ (** <name, inductive/coinductive, type, constructor list>
+ * true means inductive, false coinductive *)
+type 'term inductive_type = string * bool * 'term * (string * 'term) list
+
+type search_kind = [ `Locate | `Hint | `Match | `Elim ]
+
+type print_kind = [ `Env | `Coer ]
+
type 'term command =
+ | Abort
+ | Baseuri of string option (** get/set base uri *)
+ | Basedir of string option (** get/set base dir *)
+ | Check of 'term
+ | Search_pat of search_kind * string (* searches with string pattern *)
+ | Search_term of search_kind * 'term (* searches with term pattern *)
| Proof
+ | Qed of string option
+ (** name.
+ * Name is needed when theorem was started without providing a name
+ *)
+ | Quit
+ | Inductive of (string * 'term) list * 'term inductive_type list
+ (** parameters, list of mutual inductive types *)
| Theorem of thm_flavour * string option * 'term * 'term option
- (* flavour, name, type, body
+ (** flavour, name, type, body
* - name is absent when an unnamed theorem is being proved, tipically in
* interactive usage
* - body is present when its given along with the command, otherwise it
* will be given in proof editing mode using the tactical language
*)
- | Qed of string option
- (* name.
- * Name is needed when theorem was started without providing a name
- *)
- | Quit
+ | Coercion of 'term
+ | Redo of int option
+ | Undo of int option
+ | Print of print_kind
type ('term, 'ident) tactical =
| LocatedTactical of CicAst.location * ('term, 'ident) tactical