]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/tactics/eliminationTactics.ml
name specifications added for elim_intros, elim_intros_simpl and elim_type
[helm.git] / helm / ocaml / tactics / eliminationTactics.ml
index 4f840764a8d17466acf6f094e98dec00f1cac49f..e52fff6e4452f671c2cc6e5634c41b2e03504716 100644 (file)
@@ -57,18 +57,19 @@ let induction_tac ~term status =
 ;;
 *)
 
-let elim_type_tac ~term =
- let elim_type_tac ~term status =
+let elim_type_tac ?(mk_fresh_name_callback = FreshNamesGenerator.mk_fresh_name ~subst:[]) 
+                  ?depth ?using what =
+ let elim_type_tac status =
    let module C = Cic in
    let module P = PrimitiveTactics in
    let module T = Tacticals in
     ProofEngineTypes.apply_tactic 
      (T.thens
-      ~start: (P.cut_tac term)
-      ~continuations:[ P.elim_intros_simpl_tac ~term:(C.Rel 1) ; T.id_tac ])
+      ~start: (P.cut_tac what)
+      ~continuations:[ P.elim_intros_simpl_tac ?depth ?using ~mk_fresh_name_callback (C.Rel 1) ; T.id_tac ])
      status
  in
-  ProofEngineTypes.mk_tactic (elim_type_tac ~term)
+  ProofEngineTypes.mk_tactic elim_type_tac
 ;;
 
 
@@ -107,7 +108,7 @@ let decompose_tac ?(uris_choice_callback=(function l -> l)) term =
          | (C.Appl ((C.MutInd (uri,typeno,exp_named_subst))::applist)) (* when (not (List.mem (uri,typeno,exp_named_subst) urilist)) *) -> 
                (uri,typeno,exp_named_subst)::(List.fold_left search_inductive_types urilist applist)
          | _ -> urilist
-         (* N.B: in un caso tipo (and A !C:Prop.(or B C)) l'or *non* viene selezionato! *)
+         (* N.B: in un caso tipo (and A forall C:Prop.(or B C)) l'or *non* viene selezionato! *)
        in 
        let rec purge_duplicates urilist = 
         let rec aux triple urilist =
@@ -148,7 +149,7 @@ let decompose_tac ?(uris_choice_callback=(function l -> l)) term =
                    warn ("elim " ^ CicPp.ppterm termty);
                   ProofEngineTypes.apply_tactic 
                    (T.then_ 
-                      ~start:(P.elim_intros_simpl_tac ~term:term')
+                      ~start:(P.elim_intros_simpl_tac term')
                       ~continuation:(
                         (* clear the hyp that has just been eliminated *)
                         ProofEngineTypes.mk_tactic (fun status ->