]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/acic_procedural/procedural2.ml
- Procedural: we now reconstruct "let H := v in t" with "intros (1) H" when the goal...
[helm.git] / helm / software / components / acic_procedural / procedural2.ml
index dbd70428c7cba8195bc408b4fea6e46889fe3d5a..e41dd101b896b8f64bea8fbae0a22d6331d15c84 100644 (file)
@@ -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