]> matita.cs.unibo.it Git - helm.git/commitdiff
New function pack_coercion_metasenv, used in auto after try_candidates
authorAndrea Asperti <andrea.asperti@unibo.it>
Fri, 20 Oct 2006 14:35:22 +0000 (14:35 +0000)
committerAndrea Asperti <andrea.asperti@unibo.it>
Fri, 20 Oct 2006 14:35:22 +0000 (14:35 +0000)
to clean up the metasenv (othewise application could fail).

components/cic_unification/cicRefine.ml
components/cic_unification/cicRefine.mli

index 0a6510b445ad1957681f60db8faf51b7ba18072d..dee8ba5f3a451d7e8470f738fbabf618397314d9 100644 (file)
@@ -1809,6 +1809,31 @@ let pack_coercion metasenv ctx t =
   merge_coercions ctx t
 ;;
 
+let pack_coercion_metasenv conjectures =
+  let module C = Cic in
+  List.map 
+    (fun (i, ctx, ty) -> 
+       let ctx = 
+         List.fold_right 
+           (fun item ctx ->
+              let item' =
+                match item with
+                    Some (name, C.Decl t) -> 
+                      Some (name, C.Decl (pack_coercion conjectures ctx t))
+                  | Some (name, C.Def (t,None)) -> 
+                      Some (name,C.Def (pack_coercion conjectures ctx t,None))
+                  | Some (name, C.Def (t,Some ty)) -> 
+                      Some (name, C.Def (pack_coercion conjectures ctx t, 
+                                        Some (pack_coercion conjectures ctx ty)))
+                  | None -> None
+              in
+                item'::ctx
+           ) ctx []
+       in
+         ((i,ctx,pack_coercion conjectures ctx ty))
+    ) conjectures
+;;
+
 let pack_coercion_obj obj =
   let module C = Cic in
   match obj with
@@ -1829,29 +1854,7 @@ let pack_coercion_obj obj =
       let ty = pack_coercion [] [] ty in
         C.Variable (name, body, ty, params, attrs)
   | C.CurrentProof (name, conjectures, body, ty, params, attrs) ->
-      let conjectures = 
-        List.map 
-          (fun (i, ctx, ty) -> 
-            let ctx = 
-              List.fold_right 
-                (fun item ctx ->
-                  let item' =
-                   match item with
-                      Some (name, C.Decl t) -> 
-                        Some (name, C.Decl (pack_coercion conjectures ctx t))
-                    | Some (name, C.Def (t,None)) -> 
-                        Some (name,C.Def (pack_coercion conjectures ctx t,None))
-                    | Some (name, C.Def (t,Some ty)) -> 
-                        Some (name, C.Def (pack_coercion conjectures ctx t, 
-                                       Some (pack_coercion conjectures ctx ty)))
-                    | None -> None
-                  in
-                   item'::ctx
-                ) ctx []
-            in
-             ((i,ctx,pack_coercion conjectures ctx ty))
-          ) conjectures
-      in
+      let conjectures = pack_coercion_metasenv conjectures in
       let body = pack_coercion conjectures [] body in
       let ty = pack_coercion conjectures [] ty in
       C.CurrentProof (name, conjectures, body, ty, params, attrs)
index be1069e716ef35459836f464921e77b9315fee05..30b264455246890438191bc2a1a0a9757db652fa 100644 (file)
@@ -48,3 +48,4 @@ val insert_coercions: bool ref (* initially true *)
 
 val pack_coercion_obj: Cic.obj -> Cic.obj
 
+val pack_coercion_metasenv: Cic.metasenv -> Cic.metasenv