]> matita.cs.unibo.it Git - helm.git/blobdiff - components/acic_procedural/acic2Procedural.ml
procedural : some improvements.
[helm.git] / components / acic_procedural / acic2Procedural.ml
index b1cbc74abdacec4633ff828efcb1a71999355da7..22936c1a4531a6338dcb2ca3e7916cf062f41490 100644 (file)
@@ -228,7 +228,7 @@ and mk_fwd_rewrite st dtext name tl direction =
          [T.Branch (qs, ""); p2; p1] 
 
 and mk_fwd_proof st dtext name = function
-   | C.AAppl (_, hd :: tl) as v -> 
+   | C.AAppl (_, hd :: tl) as v                         -> 
       if is_rewrite_right hd then mk_fwd_rewrite st dtext name tl true else  
       if is_rewrite_left hd then mk_fwd_rewrite st dtext name tl false else
       let ty, _ = TC.type_of_aux' [] st.context (cic hd) Un.empty_ugraph in
@@ -241,11 +241,16 @@ and mk_fwd_proof st dtext name = function
             let text = Printf.sprintf "%u %s" (List.length classes) (Cl.to_string h) in
             [T.LetIn (name, v, dtext ^ text)]
       end
-   | v                          -> 
-      [T.LetIn (name, v, dtext)] 
+   | C.AMutCase (id, uri, tyno, outty, arg, cases) as v ->
+      begin match Cn.mk_ind st.context id uri tyno outty arg cases with 
+         | None   -> [T.LetIn (name, v, dtext)] 
+         | Some v -> mk_fwd_proof st dtext name v
+      end
+   | v                                                  ->
+      [T.LetIn (name, v, dtext)]
 
 and mk_proof st = function
-   | C.ALambda (_, name, v, t) as what -> 
+   | C.ALambda (_, name, v, t) as what             ->
       let entry = Some (name, C.Decl (cic v)) in
       let intro = get_intro name t in
       let ety = match get_inner_types st what with
@@ -253,7 +258,7 @@ and mk_proof st = function
         | None          -> None
       in
       mk_proof (add st entry intro ety) t
-   | C.ALetIn (_, name, v, t) as what  ->
+   | C.ALetIn (_, name, v, t) as what              ->
       let proceed, dtext = test_depth st in
       let script = if proceed then 
          let entry = Some (name, C.Def (cic v, None)) in
@@ -264,16 +269,16 @@ and mk_proof st = function
         [T.Apply (what, dtext)]
       in
       mk_intros st script
-   | C.ARel _ as what                  ->
+   | C.ARel _ as what                              ->
       let _, dtext = test_depth st in
       let text = "assumption" in
       let script = [T.Apply (what, dtext ^ text)] in 
       mk_intros st script
-   | C.AMutConstruct _ as what         ->
+   | C.AMutConstruct _ as what                     ->
       let _, dtext = test_depth st in
       let script = [T.Apply (what, dtext)] in 
       mk_intros st script   
-   | C.AAppl (_, hd :: tl) as t        ->
+   | C.AAppl (_, hd :: tl) as t                    ->
       let proceed, dtext = test_depth st in
       let script = if proceed then
          let ty, _ = TC.type_of_aux' [] st.context (cic hd) Un.empty_ugraph in
@@ -308,7 +313,15 @@ and mk_proof st = function
          [T.Apply (t, dtext)]
       in
       mk_intros st script
-   | t                                 ->
+   | C.AMutCase (id, uri, tyno, outty, arg, cases) ->
+      begin match Cn.mk_ind st.context id uri tyno outty arg cases with 
+         | None   -> 
+            let text = Printf.sprintf "%s" "UNEXPANDED: mutcase" in
+            let script = [T.Note text] in
+            mk_intros st script
+         | Some t -> mk_proof st t
+      end
+   | t                                             ->
       let text = Printf.sprintf "%s: %s" "UNEXPANDED" (string_of_head t) in
       let script = [T.Note text] in
       mk_intros st script