| 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 = 2
+
type ('term,'obj) command =
| Default of loc * string * UriManager.uri list
| Include of loc * string
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 *)
| Render of loc * UriManager.uri (* render library object *)
+(* composed magic: term + command magics. No need to change this value *)
+let magic = magic + 10000 * CicNotationPt.magic
+
+let reash_cmd_uris =
+ let reash_uri uri = UriManager.uri_of_string (UriManager.string_of_uri uri) in
+ function
+ | Default (loc, name, uris) ->
+ let uris = List.map reash_uri uris in
+ Default (loc, name, uris)
+ | Interpretation (loc, dsc, args, cic_appl_pattern) ->
+ let rec aux =
+ function
+ | CicNotationPt.UriPattern uri ->
+ CicNotationPt.UriPattern (reash_uri uri)
+ | CicNotationPt.ApplPattern args ->
+ CicNotationPt.ApplPattern (List.map aux args)
+ | CicNotationPt.VarPattern _
+ | CicNotationPt.ImplicitPattern as pat -> pat
+ in
+ let appl_pattern = aux cic_appl_pattern in
+ Interpretation (loc, dsc, args, appl_pattern)
+ | cmd -> cmd
+
type ('term, 'lazy_term, 'reduction, 'ident) tactical =
| Tactic of loc * ('term, 'lazy_term, 'reduction, 'ident) tactic
| Do of loc * int * ('term, 'lazy_term, 'reduction, 'ident) tactical
| 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
| Executable of loc * ('term, 'lazy_term, 'reduction, 'obj, 'ident) code
| Comment of loc * ('term, 'lazy_term, 'reduction, 'obj, 'ident) comment
+ (* statements meaningful for matitadep *)
+type dependency =
+ | IncludeDep of string
+ | BaseuriDep of string
+ | UriDep of UriManager.uri
+