X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_transformations%2FcicAst.ml;h=fcc80369794c375c8bbe0b8d825d8cece1f2b701;hb=ebc089606ccbb3e9dbde142542a1f98f5020b4dd;hp=f5aeb5d840d811704dfcae886cf75a76232d3b48;hpb=97790db29ad0dc3d31e61acc69894aa5e6109a9e;p=helm.git diff --git a/helm/ocaml/cic_transformations/cicAst.ml b/helm/ocaml/cic_transformations/cicAst.ml index f5aeb5d84..fcc803697 100644 --- a/helm/ocaml/cic_transformations/cicAst.ml +++ b/helm/ocaml/cic_transformations/cicAst.ml @@ -23,65 +23,28 @@ * http://helm.cs.unibo.it/ *) - (* when an 'ident option is None, the default is to apply the tactic - to the current goal *) +(** {2 Parsing related types} *) -type reduction_kind = [ `Reduce | `Simpl | `Whd ] +type location = Lexing.position * Lexing.position -type 'term pattern = - | Pattern of 'term + (* maps old style (i.e. <= 3.07) lexer location to new style location, padding + * with dummy values where needed *) +let floc_of_loc (loc_begin, loc_end) = + let floc_begin = + { Lexing.pos_fname = ""; Lexing.pos_lnum = -1; Lexing.pos_bol = -1; + Lexing.pos_cnum = loc_begin } + in + let floc_end = { floc_begin with Lexing.pos_cnum = loc_end } in + (floc_begin, floc_end) -type location = int * int + (* the other way round *) +let loc_of_floc = function + | { Lexing.pos_cnum = loc_begin }, { Lexing.pos_cnum = loc_end } -> + (loc_begin, loc_end) -type ('term, 'ident) tactic = - | LocatedTactic of location * ('term, 'ident) tactic +let dummy_floc = floc_of_loc (-1, -1) - | 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 (* TODO clashes with term below *) - | 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 *) +(** {2 Cic Ast} *) type binder_kind = [ `Lambda | `Pi | `Exists | `Forall ] type induction_kind = [ `Inductive | `CoInductive ] @@ -97,12 +60,15 @@ type term = | Appl of term list | Binder of binder_kind * capture_variable * term (* kind, name, body *) - | Case of term * string * term option * (case_pattern * term) list + | Case of term * string option * term option * (case_pattern * term) list (* what to match, inductive type, out type, list *) | LetIn of capture_variable * term * term (* name, body, where *) | LetRec of induction_kind * (capture_variable * term * int) list * term (* (name, body, decreasing argument) list, where *) - | Ident of string * subst list (* literal, substitutions *) + | Ident of string * subst list option + (* literal, substitutions. + * Some [] -> user has given an empty explicit substitution list + * None -> user has given no explicit substitution list *) | Implicit | Meta of int * meta_subst list | Num of string * int (* literal, instance *)