type auto_params = nterm list option * (string*string) list
+(* The additional a is for abstract *)
+type 'term aauto_params = 'term list option * (string*string) list
+
+type 'term just = [`Term of 'term | `Auto of 'term aauto_params]
+
type ntactic =
| NApply of loc * nterm
| NSmartApply of loc * nterm
| NAssumption of loc
| NRepeat of loc * ntactic
| NBlock of loc * ntactic list
+ (* Declarative langauge *)
+ (* Not the best idea to use a string directly, an abstract type for identifiers would be better *)
+ | Assume of loc * string * nterm * nterm option (* loc, identifier, type, eqty *)
+ | Suppose of loc * nterm *string * nterm option (* loc, assumption, identifier, eqass *)
+ | By_just_we_proved of loc * nterm just * nterm * string option * nterm option (* loc,
+ justification, conclusion, identifier, eqconcl *)
+ | We_need_to_prove of loc * nterm * string option * nterm option (* loc, newconclusion,
+ identifier, equivnewcon *)
+ | Bydone of loc * nterm just
+ (*
+ | ExistsElim of loc * nterm just * string * nterm * nterm * string
+ | AndElim of loc * nterm just * nterm * string * nterm * string
+ *)
type nmacro =
| NCheck of loc * nterm
(** To be increased each time the command type below changes, used for "safe"
* marshalling *)
-let magic = 36
+let magic = 37
(* composed magic: term + command magics. No need to change this value *)
let magic = magic + 10000 * NotationPt.magic
type command =
| Include of loc * inclusion_mode * string (* _,buri,_,path *)
| UnificationHint of loc * nterm * int (* term, precedence *)
- | NObj of loc * nterm NotationPt.obj
+ | NObj of loc * nterm NotationPt.obj * bool
| NDiscriminator of loc * nterm
| NInverter of loc * string * nterm * bool list option * nterm option
- | NUnivConstraint of loc * NUri.uri * NUri.uri
+ | NUnivConstraint of loc * bool * NUri.uri * NUri.uri
| NCopy of loc * string * NUri.uri * (NUri.uri * NUri.uri) list
- | NCoercion of loc * string * bool * nterm * nterm * (string * nterm) * nterm
- | NQed of loc
+ | NCoercion of loc * string * bool *
+ (nterm * nterm * (string * nterm) * nterm) option
+ | NQed of loc * bool
(* ex lexicon commands *)
| Alias of loc * alias_spec
(** parameters, name, type, fields *)