]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/tactics/reductionTactics.ml
A few other tactics made available to matita.
[helm.git] / helm / ocaml / tactics / reductionTactics.ml
index 975333fa96da753d2cd40c1f43699043f5009777..bfbfdb2a37c0a1113336f9b2d8dec4339f799859 100644 (file)
@@ -56,11 +56,16 @@ let reduction_tac ~reduction ~pattern:(hyp_patterns,goal_pattern) (proof,goal) =
   (*CSC: siamo nel contesto errato. Metto il try, ma che schifo!!!!          *)
   (*CSC: Anche perche' cosi' catturo anche quelle del replace che non dovrei *)
     try
-     let terms' = List.map (reduction context) terms in
+     let terms, terms' = 
+       List.split
+         (List.map 
+           (fun i, t -> t, reduction (i @ context) t)
+         terms)
+     in
       ProofEngineReduction.replace ~equality:(==) ~what:terms ~with_what:terms'
        ~where:where
-    with
-     _ -> where
+    (* FIXME this is a catch ALL... bad thing *)
+    with exc -> (*prerr_endline (Printexc.to_string exc);*) where
   in
   let find_pattern_for name =
     try Some (snd(List.find (fun (n, pat) -> Cic.Name n = name) hyp_patterns))
@@ -68,10 +73,9 @@ let reduction_tac ~reduction ~pattern:(hyp_patterns,goal_pattern) (proof,goal) =
   in
   let ty' = 
     match goal_pattern with
-    | None -> replace context ty [ty]
+    | None -> replace context ty [[],ty]
     | Some pat -> 
-        let terms = CicUtil.select ~term:ty ~context:pat in
-        let terms = List.map snd terms in
+        let terms = ProofEngineHelpers.select ~term:ty ~pattern:pat in
         replace context ty terms
   in
   let context' =
@@ -83,8 +87,7 @@ let reduction_tac ~reduction ~pattern:(hyp_patterns,goal_pattern) (proof,goal) =
            (match find_pattern_for name with
            | None -> entry::context
            | Some pat -> 
-               let terms = CicUtil.select ~term ~context:pat in
-               let terms = List.map snd terms in
+               let terms = ProofEngineHelpers.select ~term ~pattern:pat in
                let where = replace context term terms in
                let entry = Some (name,Cic.Decl where) in
                entry::context)
@@ -92,8 +95,7 @@ let reduction_tac ~reduction ~pattern:(hyp_patterns,goal_pattern) (proof,goal) =
            (match find_pattern_for name with
            | None -> entry::context
            | Some pat -> 
-               let terms = CicUtil.select ~term ~context:pat in
-               let terms = List.map snd terms in
+               let terms = ProofEngineHelpers.select ~term ~pattern:pat in
                let where = replace context term terms in
                let entry = Some (name,Cic.Def (where,None)) in
                entry::context)
@@ -123,15 +125,13 @@ let whd_tac ~pattern =
 let normalize_tac ~pattern = 
  mk_tactic (reduction_tac ~reduction:CicReduction.normalize ~pattern );;
 
-let fold_tac ~reduction ~also_in_hypotheses ~term =
- let fold_tac ~reduction ~also_in_hypotheses ~term (proof,goal) =
+let fold_tac ~reduction ~pattern ~term =
+(*
+ let fold_tac ~reduction ~pattern:(hyp_patterns,goal_pattern) ~term (proof,goal)
+ =
   let curi,metasenv,pbo,pty = proof in
   let metano,context,ty = CicUtil.lookup_meta goal metasenv in
    let term' = reduction context term in
-    (* We don't know if [term] is a subterm of [ty] or a subterm of *)
-    (* the type of one metavariable. So we replace it everywhere.   *)
-    (*CSC: ma si potrebbe ovviare al problema. Ma non credo *)
-    (*CSC: che si guadagni nulla in fatto di efficienza.    *) 
     let replace =
      ProofEngineReduction.replace ~equality:(=) ~what:[term'] ~with_what:[term]
     in
@@ -158,5 +158,6 @@ let fold_tac ~reduction ~also_in_hypotheses ~term =
      in
       (curi,metasenv',pbo,pty), [metano]
  in
-  mk_tactic (fold_tac ~reduction ~also_in_hypotheses ~term)
+  mk_tactic (fold_tac ~reduction ~pattern ~term)
+*) assert false
 ;;