| Absurd of loc * 'term
| Apply of loc * 'term
| Assumption of loc
- | Auto of loc * int option * int option * string option
- (* depth, width, paramodulation *)
+ | Auto of loc * int option * int option * string option * string option
+ (* depth, width, paramodulation, full *) (* ALB *)
| Change of loc * ('term, 'lazy_term, 'ident) pattern * 'lazy_term
| Clear of loc * 'ident
| ClearBody of loc * 'ident
| Inductive of (string * Ast.term) list *
Ast.term inductive_type list
(** parameters, list of loc * mutual inductive types *)
- | Theorem of thm_flavour * string * Ast.term *
- Ast.term option
+ | Theorem of thm_flavour * string * Ast.term * Ast.term option
(** flavour, name, type, body
* - name is absent when an unnamed theorem is being proved, tipically in
* interactive usage
(string * Ast.term) list
(** left parameters, name, type, fields *)
+type metadata =
+ | Dependency of string (* baseuri without trailing slash *)
+ | Baseuri of string
+
+let compare_metadata = Pervasives.compare
+
+let eq_metadata = (=)
+
(** To be increased each time the command type below changes, used for "safe"
* marshalling *)
-let magic = 1
+let magic = 2
type ('term,'obj) command =
| Default of loc * string * UriManager.uri list
Ast.cic_appl_pattern
(* description (i.e. id), symbol, arg pattern, appl pattern *)
+ | Metadata of loc * metadata
+
(* DEBUGGING *)
| Dump of loc (* dump grammar on stdout *)
(* DEBUGGING *)
| Then of loc * ('term, 'lazy_term, 'reduction, 'ident) tactical *
('term, 'lazy_term, 'reduction, 'ident) tactical list
| First of loc * ('term, 'lazy_term, 'reduction, 'ident) tactical list
- (* try a sequence of loc * tacticals until one succeeds, fail otherwise *)
+ (* try a sequence of loc * tactical until one succeeds, fail otherwise *)
| Try of loc * ('term, 'lazy_term, 'reduction, 'ident) tactical
(* try a tactical and mask failures *)
| Solve of loc * ('term, 'lazy_term, 'reduction, 'ident) tactical list
+ | Dot of loc
+ | Semicolon of loc
+ | Branch of loc
+ | Shift of loc
+ | Pos of loc * int
+ | Merge of loc
+ | Focus of loc * int list
+ | Unfocus of loc
+ | Skip of loc
+
+let is_punctuation =
+ function
+ | Dot _ | Semicolon _ | Branch _ | Shift _ | Merge _ | Pos _ -> true
+ | _ -> false
type ('term, 'lazy_term, 'reduction, 'obj, 'ident) code =
| Command of loc * ('term,'obj) command
| Macro of loc * 'term macro
| Tactical of loc * ('term, 'lazy_term, 'reduction, 'ident) tactical
+ * ('term, 'lazy_term, 'reduction, 'ident) tactical option(* punctuation *)
type ('term, 'lazy_term, 'reduction, 'obj, 'ident) comment =
| Note of loc * string