]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_unification/cicMkImplicit.ml
Big commit and major code clean-up:
[helm.git] / helm / ocaml / cic_unification / cicMkImplicit.ml
index 851355e95eaf76e60f1e5609a6bd9730b23eca42..a2d0a73d54bbf09ecf10da7b08a2512f9c42dbbf 100644 (file)
@@ -278,3 +278,36 @@ let expand_implicits metasenv subst context term =
   in
   aux metasenv context term
 
+let expand_implicits_in_obj metasenv subst =
+ function
+    Cic.Constant (name,bo,ty,params,attrs) ->
+     let metasenv,bo' =
+      match bo with
+         None -> metasenv,None
+       | Some bo ->
+          let metasenv,bo' = expand_implicits metasenv subst [] bo in
+           metasenv,Some bo' in
+     let metasenv,ty' = expand_implicits metasenv subst [] ty in
+      metasenv,Cic.Constant (name,bo',ty',params,attrs)
+  | Cic.CurrentProof (name,metasenv',bo,ty,params,attrs) ->
+     assert (metasenv' = []);
+     let metasenv,bo' = expand_implicits metasenv subst [] bo in
+     let metasenv,ty' = expand_implicits metasenv subst [] ty in
+      metasenv,Cic.CurrentProof (name,metasenv,bo',ty',params,attrs)
+  | Cic.InductiveDefinition (tyl,params,paramsno,attrs) ->
+     let metasenv,tyl =
+      List.fold_right
+       (fun (name,b,ty,cl) (metasenv,res) ->
+         let metasenv,ty' = expand_implicits metasenv subst [] ty in
+         let metasenv,cl' =
+          List.fold_right
+           (fun (name,ty) (metasenv,res) ->
+             let metasenv,ty' = expand_implicits metasenv subst [] ty in
+              metasenv,(name,ty')::res
+           ) cl (metasenv,[])
+         in
+          metasenv,(name,b,ty',cl')::res
+       ) tyl (metasenv,[])
+     in
+      metasenv,Cic.InductiveDefinition (tyl,params,paramsno,attrs)
+  | Cic.Variable _ -> assert false (* Not implemented *)