]> matita.cs.unibo.it Git - helm.git/blob - helm/software/components/grafite/grafiteAst.ml
Release 0.5.9.
[helm.git] / helm / software / components / grafite / grafiteAst.ml
1 (* Copyright (C) 2004, HELM Team.
2  * 
3  * This file is part of HELM, an Hypertextual, Electronic
4  * Library of Mathematics, developed at the Computer Science
5  * Department, University of Bologna, Italy.
6  * 
7  * HELM is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  * 
12  * HELM is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with HELM; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
20  * MA  02111-1307, USA.
21  * 
22  * For details, see the HELM World-Wide-Web page,
23  * http://helm.cs.unibo.it/
24  *)
25
26 (* $Id$ *)
27
28 type direction = [ `LeftToRight | `RightToLeft ]
29
30 type loc = Stdpp.location
31
32 type ('term, 'lazy_term, 'ident) pattern =
33   'lazy_term option * ('ident * 'term) list * 'term option
34
35 type npattern = 
36  CicNotationPt.term option * (string * CicNotationPt.term) list * CicNotationPt.term option
37
38 type 'lazy_term reduction =
39   [ `Normalize
40   | `Simpl
41   | `Unfold of 'lazy_term option
42   | `Whd ]
43
44 type 'ident intros_spec = int option * 'ident option list
45
46 type 'term auto_params = 'term list * (string*string) list
47
48 type 'term just =
49  [ `Term of 'term
50  | `Auto of 'term auto_params ]
51
52 type ntactic =
53    | NApply of loc * CicNotationPt.term
54    | NAssert of loc * ((string * [`Decl of CicNotationPt.term | `Def of CicNotationPt.term * CicNotationPt.term]) list * CicNotationPt.term) list
55    | NCases of loc * CicNotationPt.term * npattern  
56    | NCase1 of loc * string
57    | NChange of loc * npattern * CicNotationPt.term
58    | NConstructor of loc * int option * CicNotationPt.term list
59    | NCut of loc * CicNotationPt.term
60 (* | NDiscriminate of loc * CicNotationPt.term
61    | NSubst of loc * CicNotationPt.term *)
62    | NDestruct of loc
63    | NElim of loc * CicNotationPt.term * npattern  
64    | NGeneralize of loc * npattern
65    | NId of loc
66    | NIntro of loc * string
67    | NLApply of loc * CicNotationPt.term
68    | NLetIn of loc * npattern * CicNotationPt.term * string
69    | NReduce of loc * [ `Normalize of bool | `Whd of bool ] * npattern
70    | NRewrite of loc * direction * CicNotationPt.term * npattern
71    | NAuto of loc * CicNotationPt.term auto_params
72    | NDot of loc
73    | NSemicolon of loc
74    | NBranch of loc
75    | NShift of loc
76    | NPos of loc * int list
77    | NPosbyname of loc * string
78    | NWildcard of loc
79    | NMerge of loc
80    | NSkip of loc
81    | NFocus of loc * int list
82    | NUnfocus of loc
83    | NTry of loc * ntactic
84    | NAssumption of loc
85    | NRepeat of loc * ntactic
86    | NBlock of loc * ntactic list
87
88 type ('term, 'lazy_term, 'reduction, 'ident) tactic =
89   (* Higher order tactics (i.e. tacticals) *)
90   | Do of loc * int * ('term, 'lazy_term, 'reduction, 'ident) tactic
91   | Repeat of loc * ('term, 'lazy_term, 'reduction, 'ident) tactic
92   | Seq of loc * ('term, 'lazy_term, 'reduction, 'ident) tactic list
93       (* sequential composition *)
94   | Then of loc * ('term, 'lazy_term, 'reduction, 'ident) tactic *
95       ('term, 'lazy_term, 'reduction, 'ident) tactic list
96   | First of loc * ('term, 'lazy_term, 'reduction, 'ident) tactic list
97       (* try a sequence of loc * tactic until one succeeds, fail otherwise *)
98   | Try of loc * ('term, 'lazy_term, 'reduction, 'ident) tactic
99       (* try a tactic and mask failures *)
100   | Solve of loc * ('term, 'lazy_term, 'reduction, 'ident) tactic list
101   | Progress of loc * ('term, 'lazy_term, 'reduction, 'ident) tactic
102   (* Real tactics *)
103   | Absurd of loc * 'term
104   | Apply of loc * 'term
105   | ApplyRule of loc * 'term
106   | ApplyP of loc * 'term (* apply for procedural reconstruction *)
107   | ApplyS of loc * 'term * 'term auto_params
108   | Assumption of loc
109   | AutoBatch of loc * 'term auto_params
110   | Cases of loc * 'term * ('term, 'lazy_term, 'ident) pattern *
111              'ident intros_spec
112   | Change of loc * ('term, 'lazy_term, 'ident) pattern * 'lazy_term
113   | Clear of loc * 'ident list
114   | ClearBody of loc * 'ident
115   | Compose of loc * 'term * 'term option * int * 'ident intros_spec
116   | Constructor of loc * int
117   | Contradiction of loc
118   | Cut of loc * 'ident option * 'term
119   | Decompose of loc * 'ident option list
120   | Demodulate of loc * 'term auto_params
121   | Destruct of loc * 'term list option
122   | Elim of loc * 'term * 'term option * ('term, 'lazy_term, 'ident) pattern *
123             'ident intros_spec
124   | ElimType of loc * 'term * 'term option * 'ident intros_spec
125   | Exact of loc * 'term
126   | Exists of loc
127   | Fail of loc
128   | Fold of loc * 'reduction * 'lazy_term * ('term, 'lazy_term, 'ident) pattern
129   | Fourier of loc
130   | FwdSimpl of loc * string * 'ident option list
131   | Generalize of loc * ('term, 'lazy_term, 'ident) pattern * 'ident option
132   | IdTac of loc
133   | Intros of loc * 'ident intros_spec
134   | Inversion of loc * 'term
135   | LApply of loc * bool * int option * 'term list * 'term * 'ident option
136   | Left of loc
137   | LetIn of loc * 'term * 'ident
138   | Reduce of loc * 'reduction * ('term, 'lazy_term, 'ident) pattern 
139   | Reflexivity of loc
140   | Replace of loc * ('term, 'lazy_term, 'ident) pattern * 'lazy_term
141   | Rewrite of loc * direction * 'term *
142       ('term, 'lazy_term, 'ident) pattern * 'ident option list
143   | Right of loc
144   | Ring of loc
145   | Split of loc
146   | Symmetry of loc
147   | Transitivity of loc * 'term
148   (* Declarative language *)
149   | Assume of loc * 'ident * 'term
150   | Suppose of loc * 'term *'ident * 'term option
151   | By_just_we_proved of loc * 'term just *
152      'term * 'ident option * 'term option
153   | We_need_to_prove of loc * 'term * 'ident option * 'term option
154   | Bydone of loc * 'term just
155   | We_proceed_by_induction_on of loc * 'term * 'term
156   | We_proceed_by_cases_on of loc * 'term * 'term
157   | Byinduction of loc * 'term * 'ident
158   | Thesisbecomes of loc * 'term
159   | Case of loc * string * (string * 'term) list 
160   | ExistsElim of loc * 'term just * 'ident * 'term * 'ident * 'lazy_term
161   | AndElim of loc * 'term just * 'ident * 'term * 'ident * 'term
162   | RewritingStep of
163      loc * (string option * 'term) option * 'term  *
164       [ `Term of 'term | `Auto of 'term auto_params
165       | `Proof | `SolveWith of 'term ] *
166       bool (* last step*)
167   
168 type search_kind = [ `Locate | `Hint | `Match | `Elim ]
169
170 type print_kind = [ `Env | `Coer ]
171
172 type inline_param = IPPrefix of string         (* undocumented *)
173                   | IPAs of Cic.object_flavour (* preferred flavour *)
174                   | IPCoercions                (* show coercions *)
175                   | IPDebug of int             (* set debug level *)
176                   | IPProcedural               (* procedural rendering *)
177                   | IPNoDefaults               (* no default-based tactics *)
178                   | IPLevel of int             (* granularity level *)
179                   | IPDepth of int             (* undocumented *)
180                   | IPComments                 (* show statistics *)
181                   | IPCR                       (* detect convertible rewriting *)
182
183 type ('term,'lazy_term) macro = 
184   (* Whelp's stuff *)
185   | WHint of loc * 'term
186   | WMatch of loc * 'term 
187   | WInstance of loc * 'term 
188   | WLocate of loc * string
189   | WElim of loc * 'term
190   (* real macros *)
191   | Eval of loc * 'lazy_term reduction * 'term
192   | Check of loc * 'term 
193   | Hint of loc * bool
194   | AutoInteractive of loc * 'term auto_params
195   | Inline of loc * string * inline_param list
196      (* URI or base-uri, parameters *) 
197
198 type nmacro =
199   | NCheck of loc * CicNotationPt.term
200   | Screenshot of loc * string
201
202 (** To be increased each time the command type below changes, used for "safe"
203  * marshalling *)
204 let magic = 33
205
206 type ('term,'obj) command =
207   | Index of loc * 'term option (* key *) * UriManager.uri (* value *)
208   | Select of loc * UriManager.uri
209   | Pump of loc * int
210   | Coercion of loc * 'term * bool (* add_obj *) *
211      int (* arity *) * int (* saturations *)
212   | PreferCoercion of loc * 'term
213   | Inverter of loc * string * 'term * bool list
214   | Default of loc * string * UriManager.uri list
215   | Drop of loc
216   | Include of loc * bool (* normal? *) * [`New | `OldAndNew] * string 
217   | Obj of loc * 'obj
218   | Relation of
219      loc * string * 'term * 'term * 'term option * 'term option * 'term option
220   | Set of loc * string * string
221   | Print of loc * string
222   | Qed of loc
223
224 type ncommand =
225   | UnificationHint of loc * CicNotationPt.term * int (* term, precedence *)
226   | NObj of loc * CicNotationPt.term CicNotationPt.obj
227   | NDiscriminator of loc * CicNotationPt.term
228   | NInverter of loc * string * CicNotationPt.term * bool list option * CicNotationPt.term option
229   | NUnivConstraint of loc * NUri.uri * NUri.uri
230   | NCopy of loc * string * NUri.uri * (NUri.uri * NUri.uri) list
231   | NCoercion of loc * string *
232       CicNotationPt.term * CicNotationPt.term *
233       (string * CicNotationPt.term) * CicNotationPt.term
234   | NQed of loc
235
236 type punctuation_tactical =
237   | Dot of loc
238   | Semicolon of loc
239   | Branch of loc
240   | Shift of loc
241   | Pos of loc * int list
242   | Wildcard of loc
243   | Merge of loc
244
245 type non_punctuation_tactical =
246   | Focus of loc * int list
247   | Unfocus of loc
248   | Skip of loc
249
250 type ('term, 'lazy_term, 'reduction, 'obj, 'ident) code =
251   | Command of loc * ('term, 'obj) command
252   | NCommand of loc * ncommand
253   | Macro of loc * ('term,'lazy_term) macro 
254   | NMacro of loc * nmacro 
255   | NTactic of loc * ntactic list
256   | Tactic of loc * ('term, 'lazy_term, 'reduction, 'ident) tactic option
257       * punctuation_tactical
258   | NonPunctuationTactical of loc * non_punctuation_tactical
259       * punctuation_tactical
260              
261 type ('term, 'lazy_term, 'reduction, 'obj, 'ident) comment =
262   | Note of loc * string
263   | Code of loc * ('term, 'lazy_term, 'reduction, 'obj, 'ident) code
264              
265 type ('term, 'lazy_term, 'reduction, 'obj, 'ident) statement =
266   | Executable of loc * ('term, 'lazy_term, 'reduction, 'obj, 'ident) code
267   | Comment of loc * ('term, 'lazy_term, 'reduction, 'obj, 'ident) comment