exec id_tac status goal)
;;
+let sort_of_goal_tac sortref = distribute_tac (fun status goal ->
+ let goalty = get_goalty status goal in
+ let status,sort = typeof status (ctx_of goalty) goalty in
+ let sort = fix_sorts sort in
+ let status, sort = term_of_cic_term status sort (ctx_of goalty) in
+ sortref := sort;
+ status)
+;;
+
let elim_tac ~what:(txt,len,what) ~where =
let what = txt, len, Ast.Appl [what; Ast.Implicit `Vector] in
let indtyinfo = ref None in
- let sort = ref None in
- let compute_goal_sort_tac = distribute_tac (fun status goal ->
- let goalty = get_goalty status goal in
- let status, goalsort = typeof status (ctx_of goalty) goalty in
- let goalsort = fix_sorts goalsort in
- sort := Some goalsort;
- exec id_tac status goal)
- in
+ let sort = ref (NCic.Rel 1) in
atomic_tac (block_tac [
analyze_indty_tac ~what indtyinfo;
(fun s -> select_tac
~where ~job:(`Substexpand ((HExtlib.unopt !indtyinfo).rightno+1)) true s);
- compute_goal_sort_tac;
+ sort_of_goal_tac sort;
(fun status ->
- let sort = HExtlib.unopt !sort in
let ity = HExtlib.unopt !indtyinfo in
let NReference.Ref (uri, _) = ity.reference in
- let status, sort = term_of_cic_term status sort (ctx_of sort) in
- let name = NUri.name_of_uri uri ^
- match sort with
- | NCic.Sort NCic.Prop -> "_ind"
- | NCic.Sort NCic.Type u ->
- "_rect_" ^ NCicPp.ppterm ~metasenv:[] ~subst:[] ~context:[] sort
- | _ -> assert false
+ let name =
+ NUri.name_of_uri uri ^ "_" ^
+ snd (NCicElim.ast_of_sort
+ (match !sort with NCic.Sort x -> x | _ -> assert false))
in
let eliminator =
let _,_,w = what in
exact_tac ("",0,eliminator) status) ])
;;
-let sort_of_goal_tac sortref = distribute_tac (fun status goal ->
- let goalty = get_goalty status goal in
- let status,sort = typeof status (ctx_of goalty) goalty in
- let status,sort = term_of_cic_term status sort (ctx_of goalty) in
- sortref := sort;
- status)
-;;
-
let rewrite_tac ~dir ~what:(_,_,what) ~where status =
let sortref = ref (NCic.Rel 1) in
let status = sort_of_goal_tac sortref status in
- let suffix =
- match !sortref with
- | NCic.Sort NCic.Prop -> "_ind"
- | NCic.Sort NCic.Type u ->
- "_rect_" ^ NCicPp.ppterm ~metasenv:[] ~subst:[] ~context:[] !sortref
- | _ -> assert false
+ let suffix = "_" ^ snd (NCicElim.ast_of_sort
+ (match !sortref with NCic.Sort x -> x | _ -> assert false))
in
let name =
match dir with