]> matita.cs.unibo.it Git - helm.git/commitdiff
Some terms were processed in the wrong context.
authorClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Sat, 9 Jul 2005 07:55:53 +0000 (07:55 +0000)
committerClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Sat, 9 Jul 2005 07:55:53 +0000 (07:55 +0000)
helm/ocaml/tactics/variousTactics.ml

index 1f2e6b13c9bd312db7ec309b2d88cf1b045533c2..bc6d522b983171aa0adc1ad8018b7d34eb46acbf 100644 (file)
@@ -96,15 +96,27 @@ let generalize_tac
         None -> None
       | Some term -> Some (CicMetaSubst.apply_subst subst term) in
     let u,typ,term =
-     match terms_with_context, term with
-        [], None ->
-         raise UnableToDetectTheTermThatMustBeGeneralizedYouMustGiveItExplicitly
-      | _, Some term
-      | (_,term)::_, None ->
-         let typ,u =
-          CicTypeChecker.type_of_aux' ~subst metasenv context term u
-         in
-          u,typ,term
+     let context_of_t,t =
+      match terms_with_context, term with
+         [], None ->
+          raise
+           UnableToDetectTheTermThatMustBeGeneralizedYouMustGiveItExplicitly
+       | _, Some t -> context,t
+       | (context_of_t,t)::_, None -> context_of_t,t
+     in
+      let t,subst,metasenv' =
+       try
+        CicMetaSubst.delift_rels [] metasenv
+         (List.length context_of_t - List.length context) t
+       with
+        CicMetaSubst.DeliftingARelWouldCaptureAFreeVariable ->
+         raise TheSelectedTermsMustLiveInTheGoalContext in
+      (*CSC: I am not sure about the following two assertions;
+        maybe I need to propagate the new subst and metasenv *)
+      assert (subst = []);
+      assert (metasenv' = metasenv);
+      let typ,u = CicTypeChecker.type_of_aux' ~subst metasenv context t u in
+       u,typ,t
     in
     (* We need to check:
         1. whether they live in the context of the goal;
@@ -118,15 +130,17 @@ let generalize_tac
      List.fold_left
       (fun u (context_of_t,t) ->
         (* 1 *)
-        begin
+        let t,subst,metasenv' =
          try
-          ignore
-           (CicMetaSubst.delift_rels [] metasenv
-             (List.length context_of_t - List.length context) t)
+          CicMetaSubst.delift_rels [] metasenv
+           (List.length context_of_t - List.length context) t
          with
           CicMetaSubst.DeliftingARelWouldCaptureAFreeVariable ->
-           raise TheSelectedTermsMustLiveInTheGoalContext
-        end;
+           raise TheSelectedTermsMustLiveInTheGoalContext in
+        (*CSC: I am not sure about the following two assertions;
+          maybe I need to propagate the new subst and metasenv *)
+        assert (subst = []);
+        assert (metasenv' = metasenv);
         (* 2 *)
         let b,u1 = CicReduction.are_convertible ~subst context term t u in 
          if not b then