+(* Copyright (C) 2005, HELM Team.
+ *
+ * This file is part of HELM, an Hypertextual, Electronic
+ * Library of Mathematics, developed at the Computer Science
+ * Department, University of Bologna, Italy.
+ *
+ * HELM is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * HELM is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HELM; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ *
+ * For details, see the HELM World-Wide-Web page,
+ * http://helm.cs.unibo.it/
+ *)
open Printf
open MatitaTypes
type options = { do_heavy_checks: bool ; include_paths: string list }
+type statement =
+ (CicNotationPt.term, GrafiteAst.obj, string) GrafiteAst.statement
+
(** create a ProofEngineTypes.mk_fresh_name_type function which uses given
* names as long as they are available, then it fallbacks to name generation
* using FreshNamesGenerator module *)
FreshNamesGenerator.mk_fresh_name ~subst:[] metasenv context name ~typ
let tactic_of_ast = function
- | TacticAst.Absurd (_, term) -> Tactics.absurd term
- | TacticAst.Apply (_, term) -> Tactics.apply term
- | TacticAst.Assumption _ -> Tactics.assumption
- | TacticAst.Auto (_,depth,width) ->
+ | GrafiteAst.Absurd (_, term) -> Tactics.absurd term
+ | GrafiteAst.Apply (_, term) -> Tactics.apply term
+ | GrafiteAst.Assumption _ -> Tactics.assumption
+ | GrafiteAst.Auto (_,depth,width) ->
AutoTactic.auto_tac ?depth ?width ~dbd:(MatitaDb.instance ()) ()
- | TacticAst.Change (_, pattern, with_what) ->
+ | GrafiteAst.Change (_, pattern, with_what) ->
Tactics.change ~pattern with_what
- | TacticAst.Clear (_,id) -> Tactics.clear id
- | TacticAst.ClearBody (_,id) -> Tactics.clearbody id
- | TacticAst.Contradiction _ -> Tactics.contradiction
- | TacticAst.Compare (_, term) -> Tactics.compare term
- | TacticAst.Constructor (_, n) -> Tactics.constructor n
- | TacticAst.Cut (_, ident, term) ->
+ | GrafiteAst.Clear (_,id) -> Tactics.clear id
+ | GrafiteAst.ClearBody (_,id) -> Tactics.clearbody id
+ | GrafiteAst.Contradiction _ -> Tactics.contradiction
+ | GrafiteAst.Compare (_, term) -> Tactics.compare term
+ | GrafiteAst.Constructor (_, n) -> Tactics.constructor n
+ | GrafiteAst.Cut (_, ident, term) ->
let names = match ident with None -> [] | Some id -> [id] in
Tactics.cut ~mk_fresh_name_callback:(namer_of names) term
- | TacticAst.DecideEquality _ -> Tactics.decide_equality
- | TacticAst.Decompose (_,term) -> Tactics.decompose term
- | TacticAst.Discriminate (_,term) -> Tactics.discriminate term
- | TacticAst.Elim (_, what, using, depth, names) ->
+ | GrafiteAst.DecideEquality _ -> Tactics.decide_equality
+ | GrafiteAst.Decompose (_,term) -> Tactics.decompose term
+ | GrafiteAst.Discriminate (_,term) -> Tactics.discriminate term
+ | GrafiteAst.Elim (_, what, using, depth, names) ->
Tactics.elim_intros ?using ?depth ~mk_fresh_name_callback:(namer_of names) what
- | TacticAst.ElimType (_, what, using, depth, names) ->
+ | GrafiteAst.ElimType (_, what, using, depth, names) ->
Tactics.elim_type ?using ?depth ~mk_fresh_name_callback:(namer_of names) what
- | TacticAst.Exact (_, term) -> Tactics.exact term
- | TacticAst.Exists _ -> Tactics.exists
- | TacticAst.Fail _ -> Tactics.fail
- | TacticAst.Fold (_, reduction_kind, term, pattern) ->
+ | GrafiteAst.Exact (_, term) -> Tactics.exact term
+ | GrafiteAst.Exists _ -> Tactics.exists
+ | GrafiteAst.Fail _ -> Tactics.fail
+ | GrafiteAst.Fold (_, reduction_kind, term, pattern) ->
let reduction =
match reduction_kind with
| `Normalize -> CicReduction.normalize ~delta:false ~subst:[]
| `Whd -> CicReduction.whd ~delta:false ~subst:[]
in
Tactics.fold ~reduction ~term ~pattern
- | TacticAst.Fourier _ -> Tactics.fourier
- | TacticAst.FwdSimpl (_, hyp, names) ->
+ | GrafiteAst.Fourier _ -> Tactics.fourier
+ | GrafiteAst.FwdSimpl (_, hyp, names) ->
Tactics.fwd_simpl ~mk_fresh_name_callback:(namer_of names) ~dbd:(MatitaDb.instance ()) hyp
- | TacticAst.Generalize (_,pattern,ident) ->
+ | GrafiteAst.Generalize (_,pattern,ident) ->
let names = match ident with None -> [] | Some id -> [id] in
Tactics.generalize ~mk_fresh_name_callback:(namer_of names) pattern
- | TacticAst.Goal (_, n) -> Tactics.set_goal n
- | TacticAst.IdTac _ -> Tactics.id
- | TacticAst.Injection (_,term) -> Tactics.injection term
- | TacticAst.Intros (_, None, names) ->
+ | GrafiteAst.Goal (_, n) -> Tactics.set_goal n
+ | GrafiteAst.IdTac _ -> Tactics.id
+ | GrafiteAst.Injection (_,term) -> Tactics.injection term
+ | GrafiteAst.Intros (_, None, names) ->
PrimitiveTactics.intros_tac ~mk_fresh_name_callback:(namer_of names) ()
- | TacticAst.Intros (_, Some num, names) ->
+ | GrafiteAst.Intros (_, Some num, names) ->
PrimitiveTactics.intros_tac ~howmany:num
~mk_fresh_name_callback:(namer_of names) ()
- | TacticAst.LApply (_, how_many, to_what, what, ident) ->
+ | GrafiteAst.LApply (_, how_many, to_what, what, ident) ->
let names = match ident with None -> [] | Some id -> [id] in
Tactics.lapply ~mk_fresh_name_callback:(namer_of names) ?how_many ~to_what what
- | TacticAst.Left _ -> Tactics.left
- | TacticAst.LetIn (loc,term,name) ->
+ | GrafiteAst.Left _ -> Tactics.left
+ | GrafiteAst.LetIn (loc,term,name) ->
Tactics.letin term ~mk_fresh_name_callback:(namer_of [name])
- | TacticAst.Reduce (_, reduction_kind, pattern) ->
+ | GrafiteAst.Reduce (_, reduction_kind, pattern) ->
(match reduction_kind with
| `Normalize -> Tactics.normalize ~pattern
| `Reduce -> Tactics.reduce ~pattern
| `Simpl -> Tactics.simpl ~pattern
| `Whd -> Tactics.whd ~pattern)
- | TacticAst.Reflexivity _ -> Tactics.reflexivity
- | TacticAst.Replace (_, pattern, with_what) ->
+ | GrafiteAst.Reflexivity _ -> Tactics.reflexivity
+ | GrafiteAst.Replace (_, pattern, with_what) ->
Tactics.replace ~pattern ~with_what
- | TacticAst.Rewrite (_, direction, t, pattern) ->
+ | GrafiteAst.Rewrite (_, direction, t, pattern) ->
EqualityTactics.rewrite_tac ~direction ~pattern t
- | TacticAst.Right _ -> Tactics.right
- | TacticAst.Ring _ -> Tactics.ring
- | TacticAst.Split _ -> Tactics.split
- | TacticAst.Symmetry _ -> Tactics.symmetry
- | TacticAst.Transitivity (_, term) -> Tactics.transitivity term
+ | GrafiteAst.Right _ -> Tactics.right
+ | GrafiteAst.Ring _ -> Tactics.ring
+ | GrafiteAst.Split _ -> Tactics.split
+ | GrafiteAst.Symmetry _ -> Tactics.symmetry
+ | GrafiteAst.Transitivity (_, term) -> Tactics.transitivity term
let disambiguate_term status term =
let (aliases, metasenv, cic, _) =
status, (wanted, hyp_paths ,goal_path)
let disambiguate_tactic status = function
- | TacticAst.Apply (loc, term) ->
+ | GrafiteAst.Apply (loc, term) ->
let status, cic = disambiguate_term status term in
- status, TacticAst.Apply (loc, cic)
- | TacticAst.Absurd (loc, term) ->
+ status, GrafiteAst.Apply (loc, cic)
+ | GrafiteAst.Absurd (loc, term) ->
let status, cic = disambiguate_term status term in
- status, TacticAst.Absurd (loc, cic)
- | TacticAst.Assumption loc -> status, TacticAst.Assumption loc
- | TacticAst.Auto (loc,depth,width) -> status, TacticAst.Auto (loc,depth,width)
- | TacticAst.Change (loc, pattern, with_what) ->
+ status, GrafiteAst.Absurd (loc, cic)
+ | GrafiteAst.Assumption loc -> status, GrafiteAst.Assumption loc
+ | GrafiteAst.Auto (loc,depth,width) -> status, GrafiteAst.Auto (loc,depth,width)
+ | GrafiteAst.Change (loc, pattern, with_what) ->
let status, with_what = disambiguate_term status with_what in
let status, pattern = disambiguate_pattern status pattern in
- status, TacticAst.Change (loc, pattern, with_what)
- | TacticAst.Clear (loc,id) -> status,TacticAst.Clear (loc,id)
- | TacticAst.ClearBody (loc,id) -> status,TacticAst.ClearBody (loc,id)
- | TacticAst.Compare (loc,term) ->
+ status, GrafiteAst.Change (loc, pattern, with_what)
+ | GrafiteAst.Clear (loc,id) -> status,GrafiteAst.Clear (loc,id)
+ | GrafiteAst.ClearBody (loc,id) -> status,GrafiteAst.ClearBody (loc,id)
+ | GrafiteAst.Compare (loc,term) ->
let status, term = disambiguate_term status term in
- status, TacticAst.Compare (loc,term)
- | TacticAst.Constructor (loc,n) ->
- status, TacticAst.Constructor (loc,n)
- | TacticAst.Contradiction loc ->
- status, TacticAst.Contradiction loc
- | TacticAst.Cut (loc, ident, term) ->
+ status, GrafiteAst.Compare (loc,term)
+ | GrafiteAst.Constructor (loc,n) ->
+ status, GrafiteAst.Constructor (loc,n)
+ | GrafiteAst.Contradiction loc ->
+ status, GrafiteAst.Contradiction loc
+ | GrafiteAst.Cut (loc, ident, term) ->
let status, cic = disambiguate_term status term in
- status, TacticAst.Cut (loc, ident, cic)
- | TacticAst.DecideEquality loc ->
- status, TacticAst.DecideEquality loc
- | TacticAst.Decompose (loc,term) ->
+ status, GrafiteAst.Cut (loc, ident, cic)
+ | GrafiteAst.DecideEquality loc ->
+ status, GrafiteAst.DecideEquality loc
+ | GrafiteAst.Decompose (loc,term) ->
let status,term = disambiguate_term status term in
- status, TacticAst.Decompose(loc,term)
- | TacticAst.Discriminate (loc,term) ->
+ status, GrafiteAst.Decompose(loc,term)
+ | GrafiteAst.Discriminate (loc,term) ->
let status,term = disambiguate_term status term in
- status, TacticAst.Discriminate(loc,term)
- | TacticAst.Exact (loc, term) ->
+ status, GrafiteAst.Discriminate(loc,term)
+ | GrafiteAst.Exact (loc, term) ->
let status, cic = disambiguate_term status term in
- status, TacticAst.Exact (loc, cic)
- | TacticAst.Elim (loc, what, Some using, depth, idents) ->
+ status, GrafiteAst.Exact (loc, cic)
+ | GrafiteAst.Elim (loc, what, Some using, depth, idents) ->
let status, what = disambiguate_term status what in
let status, using = disambiguate_term status using in
- status, TacticAst.Elim (loc, what, Some using, depth, idents)
- | TacticAst.Elim (loc, what, None, depth, idents) ->
+ status, GrafiteAst.Elim (loc, what, Some using, depth, idents)
+ | GrafiteAst.Elim (loc, what, None, depth, idents) ->
let status, what = disambiguate_term status what in
- status, TacticAst.Elim (loc, what, None, depth, idents)
- | TacticAst.ElimType (loc, what, Some using, depth, idents) ->
+ status, GrafiteAst.Elim (loc, what, None, depth, idents)
+ | GrafiteAst.ElimType (loc, what, Some using, depth, idents) ->
let status, what = disambiguate_term status what in
let status, using = disambiguate_term status using in
- status, TacticAst.ElimType (loc, what, Some using, depth, idents)
- | TacticAst.ElimType (loc, what, None, depth, idents) ->
+ status, GrafiteAst.ElimType (loc, what, Some using, depth, idents)
+ | GrafiteAst.ElimType (loc, what, None, depth, idents) ->
let status, what = disambiguate_term status what in
- status, TacticAst.ElimType (loc, what, None, depth, idents)
- | TacticAst.Exists loc -> status, TacticAst.Exists loc
- | TacticAst.Fail loc -> status,TacticAst.Fail loc
- | TacticAst.Fold (loc,reduction_kind, term, pattern) ->
+ status, GrafiteAst.ElimType (loc, what, None, depth, idents)
+ | GrafiteAst.Exists loc -> status, GrafiteAst.Exists loc
+ | GrafiteAst.Fail loc -> status,GrafiteAst.Fail loc
+ | GrafiteAst.Fold (loc,reduction_kind, term, pattern) ->
let status, pattern = disambiguate_pattern status pattern in
let status, term = disambiguate_term status term in
- status, TacticAst.Fold (loc,reduction_kind, term, pattern)
- | TacticAst.FwdSimpl (loc, hyp, names) ->
- status, TacticAst.FwdSimpl (loc, hyp, names)
- | TacticAst.Fourier loc -> status, TacticAst.Fourier loc
- | TacticAst.Generalize (loc,pattern,ident) ->
+ status, GrafiteAst.Fold (loc,reduction_kind, term, pattern)
+ | GrafiteAst.FwdSimpl (loc, hyp, names) ->
+ status, GrafiteAst.FwdSimpl (loc, hyp, names)
+ | GrafiteAst.Fourier loc -> status, GrafiteAst.Fourier loc
+ | GrafiteAst.Generalize (loc,pattern,ident) ->
let status, pattern = disambiguate_pattern status pattern in
- status, TacticAst.Generalize(loc,pattern,ident)
- | TacticAst.Goal (loc, g) -> status, TacticAst.Goal (loc, g)
- | TacticAst.IdTac loc -> status,TacticAst.IdTac loc
- | TacticAst.Injection (loc,term) ->
+ status, GrafiteAst.Generalize(loc,pattern,ident)
+ | GrafiteAst.Goal (loc, g) -> status, GrafiteAst.Goal (loc, g)
+ | GrafiteAst.IdTac loc -> status,GrafiteAst.IdTac loc
+ | GrafiteAst.Injection (loc,term) ->
let status, term = disambiguate_term status term in
- status, TacticAst.Injection (loc,term)
- | TacticAst.Intros (loc, num, names) ->
- status, TacticAst.Intros (loc, num, names)
- | TacticAst.LApply (loc, depth, to_what, what, ident) ->
+ status, GrafiteAst.Injection (loc,term)
+ | GrafiteAst.Intros (loc, num, names) ->
+ status, GrafiteAst.Intros (loc, num, names)
+ | GrafiteAst.LApply (loc, depth, to_what, what, ident) ->
let f term (status, to_what) =
let status, term = disambiguate_term status term in
status, term :: to_what
in
let status, to_what = List.fold_right f to_what (status, []) in
let status, what = disambiguate_term status what in
- status, TacticAst.LApply (loc, depth, to_what, what, ident)
- | TacticAst.Left loc -> status, TacticAst.Left loc
- | TacticAst.LetIn (loc, term, name) ->
+ status, GrafiteAst.LApply (loc, depth, to_what, what, ident)
+ | GrafiteAst.Left loc -> status, GrafiteAst.Left loc
+ | GrafiteAst.LetIn (loc, term, name) ->
let status, term = disambiguate_term status term in
- status, TacticAst.LetIn (loc,term,name)
- | TacticAst.Reduce (loc, reduction_kind, pattern) ->
+ status, GrafiteAst.LetIn (loc,term,name)
+ | GrafiteAst.Reduce (loc, reduction_kind, pattern) ->
let status, pattern = disambiguate_pattern status pattern in
- status, TacticAst.Reduce(loc, reduction_kind, pattern)
- | TacticAst.Reflexivity loc -> status, TacticAst.Reflexivity loc
- | TacticAst.Replace (loc, pattern, with_what) ->
+ status, GrafiteAst.Reduce(loc, reduction_kind, pattern)
+ | GrafiteAst.Reflexivity loc -> status, GrafiteAst.Reflexivity loc
+ | GrafiteAst.Replace (loc, pattern, with_what) ->
let status, pattern = disambiguate_pattern status pattern in
let status, with_what = disambiguate_term status with_what in
- status, TacticAst.Replace (loc, pattern, with_what)
- | TacticAst.Rewrite (loc, dir, t, pattern) ->
+ status, GrafiteAst.Replace (loc, pattern, with_what)
+ | GrafiteAst.Rewrite (loc, dir, t, pattern) ->
let status, term = disambiguate_term status t in
let status, pattern = disambiguate_pattern status pattern in
- status, TacticAst.Rewrite (loc, dir, term, pattern)
- | TacticAst.Right loc -> status, TacticAst.Right loc
- | TacticAst.Ring loc -> status, TacticAst.Ring loc
- | TacticAst.Split loc -> status, TacticAst.Split loc
- | TacticAst.Symmetry loc -> status, TacticAst.Symmetry loc
- | TacticAst.Transitivity (loc, term) ->
+ status, GrafiteAst.Rewrite (loc, dir, term, pattern)
+ | GrafiteAst.Right loc -> status, GrafiteAst.Right loc
+ | GrafiteAst.Ring loc -> status, GrafiteAst.Ring loc
+ | GrafiteAst.Split loc -> status, GrafiteAst.Split loc
+ | GrafiteAst.Symmetry loc -> status, GrafiteAst.Symmetry loc
+ | GrafiteAst.Transitivity (loc, term) ->
let status, cic = disambiguate_term status term in
- status, TacticAst.Transitivity (loc, cic)
+ status, GrafiteAst.Transitivity (loc, cic)
let apply_tactic tactic status =
let status,tactic = disambiguate_tactic status tactic in
let set_goals (status,_) goals = status,goals
- let id_tac status = apply_tactic (TacticAst.IdTac CicAst.dummy_floc) status
+ let id_tac status =
+ apply_tactic (GrafiteAst.IdTac Disambiguate.dummy_floc) status
let mk_tactic tac = tac
let eval_tactical status tac =
let rec tactical_of_ast tac =
match tac with
- | TacticAst.Tactic (loc, tactic) -> apply_tactic tactic
- | TacticAst.Seq (loc, tacticals) -> (* tac1; tac2; ... *)
+ | GrafiteAst.Tactic (loc, tactic) -> apply_tactic tactic
+ | GrafiteAst.Seq (loc, tacticals) -> (* tac1; tac2; ... *)
MatitaTacticals.seq ~tactics:(List.map tactical_of_ast tacticals)
- | TacticAst.Do (loc, num, tactical) ->
+ | GrafiteAst.Do (loc, num, tactical) ->
MatitaTacticals.do_tactic ~n:num ~tactic:(tactical_of_ast tactical)
- | TacticAst.Repeat (loc, tactical) ->
+ | GrafiteAst.Repeat (loc, tactical) ->
MatitaTacticals.repeat_tactic ~tactic:(tactical_of_ast tactical)
- | TacticAst.Then (loc, tactical, tacticals) -> (* tac; [ tac1 | ... ] *)
+ | GrafiteAst.Then (loc, tactical, tacticals) -> (* tac; [ tac1 | ... ] *)
MatitaTacticals.thens ~start:(tactical_of_ast tactical)
~continuations:(List.map tactical_of_ast tacticals)
- | TacticAst.First (loc, tacticals) ->
+ | GrafiteAst.First (loc, tacticals) ->
MatitaTacticals.first
~tactics:(List.map (fun t -> "", tactical_of_ast t) tacticals)
- | TacticAst.Try (loc, tactical) ->
+ | GrafiteAst.Try (loc, tactical) ->
MatitaTacticals.try_tactic ~tactic:(tactical_of_ast tactical)
- | TacticAst.Solve (loc, tacticals) ->
+ | GrafiteAst.Solve (loc, tacticals) ->
MatitaTacticals.solve_tactics
~tactics:(List.map (fun t -> "",tactical_of_ast t) tacticals)
in
List.fold_left (fun s (uri,o,ugraph) -> MatitaSync.add_obj uri o status)
status new_coercions in
let statement_of name =
- TacticAstPp.pp_statement
- (TacticAst.Executable (CicAst.dummy_floc,
- (TacticAst.Command (CicAst.dummy_floc,
- (TacticAst.Coercion (CicAst.dummy_floc,
- (CicAst.Ident (name, None)))))))) ^ "\n"
+ GrafiteAstPp.pp_statement
+ (GrafiteAst.Executable (Disambiguate.dummy_floc,
+ (GrafiteAst.Command (Disambiguate.dummy_floc,
+ (GrafiteAst.Coercion (Disambiguate.dummy_floc,
+ (CicNotationPt.Ident (name, None)))))))) ^ "\n"
in
let moo_content_rev =
[statement_of (UriManager.name_of_uri coer_uri)] @
let disambiguate_obj status obj =
let uri =
match obj with
- TacticAst.Inductive (_,(name,_,_,_)::_)
- | TacticAst.Record (_,name,_,_) ->
+ GrafiteAst.Inductive (_,(name,_,_,_)::_)
+ | GrafiteAst.Record (_,name,_,_) ->
Some (UriManager.uri_of_string (MatitaMisc.qualify status name ^ ".ind"))
- | TacticAst.Inductive _ -> assert false
- | TacticAst.Theorem _ -> None in
+ | GrafiteAst.Inductive _ -> assert false
+ | GrafiteAst.Theorem _ -> None in
let (aliases, metasenv, cic, _) =
match
MatitaDisambiguator.disambiguate_obj ~dbd:(MatitaDb.instance ())
status, cic
let disambiguate_command status = function
- | TacticAst.Default _
- | TacticAst.Alias _
- | TacticAst.Include _ as cmd -> status,cmd
- | TacticAst.Coercion (loc, term) ->
+ | GrafiteAst.Alias _
+ | GrafiteAst.Default _
+ | GrafiteAst.Drop _
+ | GrafiteAst.Dump _
+ | GrafiteAst.Include _
+ | GrafiteAst.Interpretation _
+ | GrafiteAst.Notation _
+ | GrafiteAst.Qed _
+ | GrafiteAst.Render _
+ | GrafiteAst.Set _ as cmd ->
+ status,cmd
+ | GrafiteAst.Coercion (loc, term) ->
let status, term = disambiguate_term status term in
- status, TacticAst.Coercion (loc,term)
- | (TacticAst.Set _ | TacticAst.Qed _ | TacticAst.Drop _ ) as cmd ->
- status, cmd
- | TacticAst.Obj (loc,obj) ->
+ status, GrafiteAst.Coercion (loc,term)
+ | GrafiteAst.Obj (loc,obj) ->
let status,obj = disambiguate_obj status obj in
- status, TacticAst.Obj (loc,obj)
+ status, GrafiteAst.Obj (loc,obj)
let try_open_in paths path =
let rec aux = function
;;
let eval_command opts status cmd =
- let status,cmd = disambiguate_command status cmd in
+ let status,cmd = disambiguate_command status cmd in
+ let cmd,notation_ids' = CicNotation.process_notation cmd in
+ let status =
+ { status with notation_ids = notation_ids' @ status.notation_ids }
+ in
match cmd with
- | TacticAst.Default (loc, what, uris) as cmd ->
+ | GrafiteAst.Default (loc, what, uris) as cmd ->
LibraryObjects.set_default what uris;
{status with moo_content_rev =
- (TacticAstPp.pp_command cmd ^ "\n") :: status.moo_content_rev}
- | TacticAst.Include (loc, path) ->
+ (GrafiteAstPp.pp_command cmd ^ "\n") :: status.moo_content_rev}
+ | GrafiteAst.Include (loc, path) ->
let path = MatitaMisc.obj_file_of_script path in
let stream =
try
let status = ref status in
!eval_from_stream_ref status stream (fun _ _ -> ());
!status
- | TacticAst.Set (loc, name, value) ->
+ | GrafiteAst.Set (loc, name, value) ->
let value =
if name = "baseuri" then
let v = MatitaMisc.strip_trailing_slash value in
value
in
set_option status name value
- | TacticAst.Drop loc -> raise Drop
- | TacticAst.Qed loc ->
+ | GrafiteAst.Drop loc -> raise Drop
+ | GrafiteAst.Qed loc ->
let uri, metasenv, bo, ty =
match status.proof_status with
| Proof (Some uri, metasenv, body, ty) ->
let name = UriManager.name_of_uri uri in
let obj = Cic.Constant (name,Some bo,ty,[],[]) in
MatitaSync.add_obj uri obj status
- | TacticAst.Coercion (loc, coercion) ->
+ | GrafiteAst.Coercion (loc, coercion) ->
eval_coercion status coercion
- | TacticAst.Alias (loc, spec) ->
+ | GrafiteAst.Alias (loc, spec) ->
let aliases =
match spec with
- | TacticAst.Ident_alias (id,uri) ->
+ | GrafiteAst.Ident_alias (id,uri) ->
DisambiguateTypes.Environment.add
(DisambiguateTypes.Id id)
(uri,(fun _ _ _-> CicUtil.term_of_uri (UriManager.uri_of_string uri)))
status.aliases
- | TacticAst.Symbol_alias (symb, instance, desc) ->
- DisambiguateTypes.Environment.add
+ | GrafiteAst.Symbol_alias (symb, instance, desc) ->
+ DisambiguateTypes.Environment.add
(DisambiguateTypes.Symbol (symb,instance))
- (DisambiguateChoices.lookup_symbol_by_dsc symb desc)
+ (DisambiguateChoices.lookup_symbol_by_dsc symb desc)
status.aliases
- | TacticAst.Number_alias (instance,desc) ->
- DisambiguateTypes.Environment.add
- (DisambiguateTypes.Num instance)
+ | GrafiteAst.Number_alias (instance,desc) ->
+ DisambiguateTypes.Environment.add
+ (DisambiguateTypes.Num instance)
(DisambiguateChoices.lookup_num_by_dsc desc) status.aliases
in
MatitaSync.set_proof_aliases status aliases
- | TacticAst.Obj (loc,obj) ->
+ | GrafiteAst.Render _ -> assert false (* ZACK: to be removed *)
+ | GrafiteAst.Dump _ -> assert false (* ZACK: to be removed *)
+ | GrafiteAst.Interpretation _
+ | GrafiteAst.Notation _ -> status
+ | GrafiteAst.Obj (loc,obj) ->
let ext,name =
match obj with
Cic.Constant (name,_,_,_,_)
let eval_executable opts status ex =
match ex with
- | TacticAst.Tactical (_, tac) -> eval_tactical status tac
- | TacticAst.Command (_, cmd) -> eval_command opts status cmd
- | TacticAst.Macro (_, mac) ->
+ | GrafiteAst.Tactical (_, tac) -> eval_tactical status tac
+ | GrafiteAst.Command (_, cmd) -> eval_command opts status cmd
+ | GrafiteAst.Macro (_, mac) ->
command_error (sprintf "The macro %s can't be in a script"
- (TacticAstPp.pp_macro_ast mac))
+ (GrafiteAstPp.pp_macro_ast mac))
let eval_comment status c = status
{do_heavy_checks = do_heavy_checks ; include_paths = include_paths}
in
match st with
- | TacticAst.Executable (_,ex) -> eval_executable opts status ex
- | TacticAst.Comment (_,c) -> eval_comment status c
+ | GrafiteAst.Executable (_,ex) -> eval_executable opts status ex
+ | GrafiteAst.Comment (_,c) -> eval_comment status c
let eval_from_stream ?do_heavy_checks ?include_paths status str cb =
- let stl = CicTextualParser2.parse_statements str in
- List.iter
- (fun ast ->
- cb !status ast;
- status := eval_ast ?do_heavy_checks ?include_paths !status ast)
- stl
-;;
+ try
+ while true do
+ let ast = GrafiteParser.parse_statement str in
+ cb !status ast;
+ status := eval_ast ?do_heavy_checks ?include_paths !status ast
+ done
+ with End_of_file -> ()
(* to avoid a long list of recursive functions *)
-eval_from_stream_ref := eval_from_stream;;
+let _ = eval_from_stream_ref := eval_from_stream
let eval_from_stream_greedy ?do_heavy_checks ?include_paths status str cb =
while true do
print_string "matita> ";
flush stdout;
- let ast = CicTextualParser2.parse_statement str in
+ let ast = GrafiteParser.parse_statement str in
cb !status ast;
status := eval_ast ?do_heavy_checks ?include_paths !status ast
done
proof_status = No_proof;
options = default_options ();
objects = [];
+ notation_ids = [];
}
-