]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/acic_procedural/proceduralConversion.ml
- libraryObjects: new default "natural numbers" with the uri of nat.
[helm.git] / helm / software / components / acic_procedural / proceduralConversion.ml
index 97e32b94a458f1cdd3ce9bf9c49f30a21c5c675a..8c9a1ddc6f04b6e6bb37e9bd6156f2cebd18482a 100644 (file)
@@ -119,19 +119,19 @@ let lift k n =
       in
       ann_term c
 
-let clear_absts m =
-   let rec aux k n = function
-      | C.AImplicit (_, None) as t         -> t
-      | C.ALambda (id, s, v, t) when k > 0 -> 
-         C.ALambda (id, s, v, aux (pred k) n t)
-      | C.ALambda (_, _, _, t) when n > 0  -> 
-         aux 0 (pred n) (lift 1 (-1) t)
-      | t                      when n > 0  ->
-           Printf.eprintf "CLEAR: %u %s\n" n (CicPp.ppterm (H.cic t));
-           assert false 
-      | t                                  -> t
-   in 
-   aux m
+let mk_arel k = C.ARel ("", "", k, "")
+
+let mk_aappl ts = C.AAppl ("", ts)
+
+let rec clear_absts f n k = function
+   | t when n = 0           -> f k t
+   | C.ALambda (_, _, _, t) -> clear_absts f (pred n) (succ k) t
+   | t                      ->
+      let u = match mk_aappl [lift (succ k) 1 t; mk_arel (succ k)] with
+         | C.AAppl (_, [ C.AAppl (id, ts); t]) -> C.AAppl (id, ts @ [t])
+         | t                                   -> t
+      in
+      clear_absts f (pred n) (succ k) u
 
 let hole id = C.AImplicit (id, Some `Hole)
 
@@ -182,11 +182,10 @@ let generalize n =
       | C.AFix (id, i, fl) -> C.AFix (id, i, List.map (gen_fix (List.length fl) k) fl)
       | C.ACoFix (id, i, fl) -> C.ACoFix (id, i, List.map (gen_cofix (List.length fl) k) fl)
    in
-   gen_term 0
+   gen_term
 
 let mk_pattern psno predicate =
-   let body = generalize psno predicate in
-   clear_absts 0 psno body
+   clear_absts (generalize psno) psno 0 predicate 
 
 let get_clears c p xtypes = 
    let meta = C.Implicit None in
@@ -244,8 +243,9 @@ let elim_inferred_type context goal arg using cpattern =
    let metasenv, ugraph = [], Un.default_ugraph in
    let ety = H.get_type "elim_inferred_type" context using in
    let _splits, args_no = PEH.split_with_whd (context, ety) in
-   let _metasenv, predicate, _arg, actual_args = PT.mk_predicate_for_elim 
-      ~context ~metasenv ~ugraph ~goal ~arg ~using ~cpattern ~args_no
+   let _metasenv, _subst, predicate, _arg, actual_args = 
+     PT.mk_predicate_for_elim 
+     ~context ~metasenv ~subst:[] ~ugraph ~goal ~arg ~using ~cpattern ~args_no
    in
    let ty = C.Appl (predicate :: actual_args) in
    let upto = List.length actual_args in