end
;;
-let index_obj_for_auto status (uri, height, _, _, kind) =
- (*prerr_endline (string_of_int height);*)
- let mk_item orig_ty spec =
- let ty,_,_ = NCicMetaSubst.saturate ~delta:max_int [] [] [] orig_ty 0 in
- let keys =
- match ty with
- | NCic.Const (NReference.Ref (_,NReference.Def h))
- | NCic.Appl (NCic.Const (NReference.Ref (_,NReference.Def h))::_)
- when h > 0 ->
- let ty',_,_= NCicMetaSubst.saturate ~delta:(h-1) [] [] [] orig_ty 0 in
- [ty;ty']
- | _ -> [ty]
+let compute_keys status uri height kind =
+ let mk_item ty spec =
+ let orig_ty = NTacStatus.mk_cic_term [] ty in
+ let status,keys = NnAuto.keys_of_type status orig_ty in
+ let keys =
+ List.map
+ (fun t ->
+ snd (NTacStatus.term_of_cic_term status t (NTacStatus.ctx_of t)))
+ keys
in
keys,NCic.Const(NReference.reference_of_spec uri spec)
in
| NCic.Constant (_,_,None, ty, _) ->
[ mk_item ty NReference.Decl ]
in
- let data = HExtlib.filter_map
+ HExtlib.filter_map
(fun (keys, t) ->
let keys = List.filter
(function
NCicPp.ppterm ~metasenv:[] ~subst:[] ~context:[] t);
None
end)
- data
- in
- let status = basic_index_obj data status in
- let dump = record_index_obj data :: status#dump in
- status#set_dump dump
+ data
+;;
+
+let index_obj_for_auto status (uri, height, _, _, kind) =
+ (*prerr_endline (string_of_int height);*)
+ let data = compute_keys status uri height kind in
+ let status = basic_index_obj data status in
+ let dump = record_index_obj data :: status#dump in
+ status#set_dump dump
;;
let index_eq uri status =
) hyps,
(text,prefix_len,concl))
) seqs)
- | GrafiteAst.NAuto (_loc, (l,a)) ->
+ | GrafiteAst.NAuto (_loc, (None,a)) -> NAuto.auto_tac ~params:(None,a)
+ | GrafiteAst.NAuto (_loc, (Some l,a)) ->
NAuto.auto_tac
- ~params:(List.map (fun x -> "",0,x) l,a)
+ ~params:(Some List.map (fun x -> "",0,x) l,a)
| GrafiteAst.NBranch _ -> NTactics.branch_tac ~force:false
| GrafiteAst.NCases (_loc, what, where) ->
NTactics.cases_tac
) (status,`New [] (* uris *)) boxml in
let _,_,_,_,nobj = obj in
let status = match nobj with
- NCic.Inductive (true,leftno,[it],_) ->
+ NCic.Inductive (is_ind,leftno,[it],_) ->
let _,ind_name,ty,cl = it in
List.fold_left
(fun status outsort ->
let status = status#set_ng_mode `ProofMode in
try
- (let status,invobj = NInversion.mk_inverter
- (ind_name ^ "_inv_" ^ (snd (NCicElim.ast_of_sort outsort)))
- it leftno outsort status status#baseuri in
+ (let status,invobj =
+ NInversion.mk_inverter
+ (ind_name ^ "_inv_" ^
+ (snd (NCicElim.ast_of_sort outsort)))
+ is_ind it leftno outsort status status#baseuri in
let _,_,menv,_,_ = invobj in
fst (match menv with
[] -> eval_ncommand opts status ("",0,GrafiteAst.NQed Stdpp.dummy_loc)
indtyno, NCicEnvironment.get_checked_indtys r
| _ -> prerr_endline ("engine: indty =" ^ NCicPp.ppterm ~metasenv:[] ~subst:[] ~context:[] indty) ; assert false in
let it = List.nth tys indtyno in
- let status,obj = NInversion.mk_inverter name it leftno ?selection sort
+ let status,obj = NInversion.mk_inverter name true it leftno ?selection sort
status status#baseuri in
let _,_,menv,_,_ = obj in
(match menv with