[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
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
| 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
[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
[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