open Printf
open MatitaTypes
+exception Drop;;
+
let debug = false ;;
let debug_print = if debug then prerr_endline else ignore ;;
| TacticAst.Assumption _ -> Tactics.assumption
| TacticAst.Auto (_,depth,width) ->
AutoTactic.auto_tac ?depth ?width ~dbd:(MatitaDb.instance ()) ()
- | TacticAst.Change (_, what, with_what, _) -> Tactics.change ~what ~with_what
+ | TacticAst.Change (_, what, with_what, pattern) ->
+ Tactics.change ~what ~with_what ~pattern
| TacticAst.Clear (_,id) -> Tactics.clear id
| TacticAst.ClearBody (_,id) -> Tactics.clearbody id
| TacticAst.Contradiction _ -> Tactics.contradiction
| TacticAst.Intros (_, Some num, names) ->
PrimitiveTactics.intros_tac ~howmany:num
~mk_fresh_name_callback:(namer_of names) ()
- | TacticAst.LApply (_, to_what, what) ->
- Tactics.lapply ?to_what what
+ | TacticAst.LApply (_, to_what, what, ident) ->
+ let names = match ident with None -> [] | Some id -> [id] in
+ Tactics.lapply ~mk_fresh_name_callback:(namer_of names) ?to_what what
| TacticAst.Left _ -> Tactics.left
| TacticAst.LetIn (loc,term,name) ->
Tactics.letin term ~mk_fresh_name_callback:(namer_of [name])
let eval_command status cmd =
match cmd with
| TacticAst.Set (loc, name, value) -> set_option status name value
+ | TacticAst.Drop loc -> raise Drop
| TacticAst.Qed loc ->
let uri, metasenv, bo, ty =
match status.proof_status with
status, TacticAst.Injection (loc,term)
| TacticAst.Intros (loc, num, names) ->
status, TacticAst.Intros (loc, num, names)
- | TacticAst.LApply (loc, to_what, what) ->
+ | TacticAst.LApply (loc, to_what, what, ident) ->
let status, to_what =
match to_what with
None -> status,None
status, Some to_what
in
let status, what = disambiguate_term status what in
- status, TacticAst.LApply (loc, to_what, what)
+ status, TacticAst.LApply (loc, to_what, what, ident)
| TacticAst.Left loc -> status, TacticAst.Left loc
| TacticAst.LetIn (loc, term, name) ->
let status, term = disambiguate_term status term in
| TacticAst.Coercion (loc, term) ->
let status, term = disambiguate_term status term in
status, TacticAst.Coercion (loc,term)
- | (TacticAst.Set _ | TacticAst.Qed _) as cmd ->
+ | (TacticAst.Set _ | TacticAst.Qed _ | TacticAst.Drop _ ) as cmd ->
status, cmd
| TacticAst.Alias _ as x -> status, x
| TacticAst.Obj (loc,obj) ->
let eval_from_stream status str cb =
let stl = CicTextualParser2.parse_statements str in
- List.fold_left
- (fun status ast -> cb status ast;eval_ast status ast) status
- stl
+ List.iter (fun ast -> cb !status ast;status := eval_ast !status ast) stl
+
+let eval_from_stream_greedy status str cb =
+ while true do
+ print_string "matita> ";
+ flush stdout;
+ let ast = CicTextualParser2.parse_statement str in
+ cb !status ast;
+ status := eval_ast !status ast
+ done
let eval_string status str =
eval_from_stream status (Stream.of_string str) (fun _ _ -> ())