]> matita.cs.unibo.it Git - helm.git/commitdiff
Added ~with_cast to the change tactic.
authorClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Wed, 4 Jul 2007 20:12:41 +0000 (20:12 +0000)
committerClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Wed, 4 Jul 2007 20:12:41 +0000 (20:12 +0000)
When with_cast is true, a cast is recorded in the lambda term.

helm/software/components/tactics/reductionTactics.ml
helm/software/components/tactics/reductionTactics.mli

index 3afef8eede4884141ab3c23aab3f79e73a842d61..9c39caa6f4cee2a4f03fbf505591398a65c24fda 100644 (file)
@@ -135,7 +135,7 @@ exception NotConvertible
         reference variables that are local to the term that is going to be
         replaced. To fix this we should parse with_what in the context of the
         term(s) to be replaced. *)
-let change_tac ~pattern with_what  =
+let change_tac ?(with_cast=false) ~pattern with_what  =
  let change_tac ~pattern ~with_what (proof, goal) =
   let curi,metasenv,_subst,pbo,pty, attrs = proof in
   let (metano,context,ty) as conjecture = CicUtil.lookup_meta goal metasenv in
@@ -206,7 +206,19 @@ let change_tac ~pattern with_what  =
         | _ as t -> t)
       metasenv
   in
-  (curi,metasenv',_subst,pbo,pty, attrs), [metano]
+   let proof,goal = (curi,metasenv',_subst,pbo,pty, attrs), metano in
+    if with_cast then
+     let metano' = ProofEngineHelpers.new_meta_of_proof ~proof in
+     let (newproof,_) =
+       let irl= CicMkImplicit.identity_relocation_list_for_metavariable context'
+       in
+        ProofEngineHelpers.subst_meta_in_proof
+         proof metano
+          (Cic.Cast (Cic.Meta(metano',irl),ty')) [metano',context',ty']
+     in
+      newproof, [metano']
+    else
+     proof,[goal]
   in
     mk_tactic (change_tac ~pattern ~with_what)
 
index 62200df69a0cfc3d6e843fae3ad0acc114d7fe4e..f04e7dcac646ca9f14c961a62dcdbc183e85356b 100644 (file)
@@ -35,7 +35,8 @@ val unfold_tac:
   pattern:ProofEngineTypes.lazy_pattern ->
     ProofEngineTypes.tactic
 
-val change_tac:
+val change_tac: 
+  ?with_cast:bool ->
   pattern:ProofEngineTypes.lazy_pattern ->
   Cic.lazy_term ->
     ProofEngineTypes.tactic