]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/acic_procedural/procedural2.ml
- hExtlib: added debugging information for split_nth
[helm.git] / helm / software / components / acic_procedural / procedural2.ml
index dbd70428c7cba8195bc408b4fea6e46889fe3d5a..7ac82a0a63989326d736864adab9ca2e866d372f 100644 (file)
@@ -64,8 +64,8 @@ let debug = ref false
 let split2_last l1 l2 =
 try
    let n = pred (List.length l1) in
-   let before1, after1 = HEL.split_nth n l1 in
-   let before2, after2 = HEL.split_nth n l2 in
+   let before1, after1 = HEL.split_nth "P2 1" n l1 in
+   let before2, after2 = HEL.split_nth "P2 2" n l2 in
    before1, before2, List.hd after1, List.hd after2
 with Invalid_argument _ -> failwith "A2P.split2_last"
    
@@ -204,7 +204,10 @@ let mk_convert st ?name sty ety note =
       | None         -> [T.Change (sty, ety, None, e, note)]
       | Some (id, i) -> 
          begin match get_entry st id with
-           | C.Def _  -> assert false (* T.ClearBody (id, "") :: script *)
+           | C.Def _  -> 
+              [T.Change (ety, sty, Some (id, Some id), e, note);
+               T.ClearBody (id, "")
+              ]
            | C.Decl _ -> 
               [T.Change (ety, sty, Some (id, Some id), e, note)] 
          end
@@ -278,8 +281,10 @@ and proc_letin st what name v w t =
    let intro = get_intro name in
    let proceed, dtext = test_depth st in
    let script = if proceed then 
-      let st, hyp, rqv = match get_inner_types st v with
-         | Some (ity, _) ->
+      let st, hyp, rqv = match get_inner_types st what, get_inner_types st v with
+         | Some (C.ALetIn _, _), _ ->
+           st, C.Def (H.cic v, H.cic w), [T.Intros (Some 1, [intro], dtext)]
+        | _, Some (ity, _)        ->
            let st, rqv = match v with
                | C.AAppl (_, hd :: tl) when is_fwd_rewrite_right st hd tl ->
                  mk_fwd_rewrite st dtext intro tl true v t ity
@@ -292,7 +297,7 @@ and proc_letin st what name v w t =
                  st, [T.Branch (qs, ""); T.Cut (intro, ity, dtext)]
            in
            st, C.Decl (H.cic ity), rqv
-        | None          ->
+        | _, None                 ->
            st, C.Def (H.cic v, H.cic w), [T.LetIn (intro, v, dtext)]
       in
       let entry = Some (name, hyp) in
@@ -383,7 +388,7 @@ and proc_case st what uri tyno u v ts =
       let qs = proc_bkd_proofs (next st) synth names classes ts in
       let lpsno, _ = H.get_ind_type uri tyno in
       let ps, _ = H.get_ind_parameters st.context (H.cic v) in
-      let _, rps = HEL.split_nth lpsno ps in
+      let _, rps = HEL.split_nth "P2 3" lpsno ps in
       let rpsno = List.length rps in 
       let e = Cn.mk_pattern rpsno u in
       let text = "" in