]> matita.cs.unibo.it Git - helm.git/commitdiff
- new fold tactic
authorClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Mon, 4 Nov 2002 11:50:58 +0000 (11:50 +0000)
committerClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Mon, 4 Nov 2002 11:50:58 +0000 (11:50 +0000)
helm/gTopLevel/reductionTactics.ml
helm/gTopLevel/reductionTactics.mli

index 0e5688e02ebe5e98a82cbca5e486e8fb8ee2bf5d..67e225c6dd07c449e87034dd920c174ed191facc 100644 (file)
@@ -40,3 +40,33 @@ let reduction_tac ~reduction ~status:(proof,goal) =
 let simpl_tac = reduction_tac ~reduction:ProofEngineReduction.simpl ;;
 let reduce_tac = reduction_tac ~reduction:ProofEngineReduction.reduce ;;
 let whd_tac = reduction_tac ~reduction:CicReduction.whd ;;
+
+let fold_tac ~term ~status:(proof,goal) =
+ let curi,metasenv,pbo,pty = proof in
+ let metano,context,ty = List.find (function (m,_,_) -> m=goal) metasenv in
+  let term' = CicReduction.whd 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
+    let ty' = replace ty in
+    let context' =
+     List.map
+      (function
+          Some (n,Cic.Decl t) -> Some (n,Cic.Decl (replace t))
+        | Some (n,Cic.Def t)  -> Some (n,Cic.Def  (replace t))
+        | None -> None
+      ) context
+    in
+     let metasenv' = 
+      List.map
+       (function
+           (n,_,_) when n = metano -> (metano,context',ty')
+         | _ as t -> t
+       ) metasenv
+     in
+      (curi,metasenv',pbo,pty), [metano]
+;;
index 97418b4da214a23bd079da031691204bfd976a29..9237deb578e2e47e8d6c15af0be50698552fa520 100644 (file)
@@ -26,3 +26,4 @@
 val simpl_tac: ProofEngineTypes.tactic
 val reduce_tac: ProofEngineTypes.tactic
 val whd_tac: ProofEngineTypes.tactic
+val fold_tac: term:Cic.term -> ProofEngineTypes.tactic